0

我用下表创建了数据库。

booking (id, user_id, user_table, date);
user (id, fname, lname);
tmp_user (id, fname, lname);

预订表同时user_id引用user表 id 和tmp_user表 id。我使用user_table列来保持用户表类型。

我想编写一个查询来获取包含用户详细信息的预订详细信息。所以我应该user_table在加入用户表之前检查列值。

可能吗?我怎样才能做到这一点?

4

1 回答 1

0

您可以通过加入并使用优先级来执行这种类型的查询:

select b.*,
       (case when u.id is not null then u.fname else tu.fname end) as fname,
       (case when u.id is not null then u.lname else tu.lname end) as lname
from booking b left outer join
     user u
     on b.user_id = u.id left outer join
     tmp_user tu
     on b.user_id = tu.id

您还可以将条件添加and u.uid is null到第二个联接。我不知道这是否有助于或妨碍性能。

哦,如果你想要用户表的值,那么这只是对逻辑的一个小修改:

select b.*,
       (case when b.user_table = 'user' then u.fname else tu.fname end) as fname,
       (case when b.user_table = 'tmp_user' then u.lname else tu.lname end) as lname
from booking b left outer join
     user u
     on b.user_id = u.id left outer join
     tmp_user tu
     on b.user_id = tu.id;
于 2013-04-23T13:40:37.053 回答