根据条件加入表格

时间:2013-12-17 05:42:45

标签: sql join rdbms

我有一种情况,我只需要在特定条件下加入一张桌子 让我们采取承保的方案

create table [premiumuser] (user_id int, name nvarchar(50));
create table [liteuser] (user_id int, name nvarchar(50));
create table [feature] (id nvarchar(50), user_id int, userkey int);

insert into [premiumuser] select 1, 'stephen';
insert into [premiumuser] select 2, 'roger';

insert into [liteuser] select 1, 'apollo';
insert into [liteuser] select 2, 'venus';

insert into feature select 'Upload content', 1, 1;
insert into feature select 'Create account', 1, 0;
insert into feature select 'View content', 2, 0;

现在我想从premiumUser或Lite用户一次只加入一个表。

即。

select F.*, U.Name from feature 
Inner Join 
if condition 1 
 then 
  LiteUser U on U.User_Id = F.User_ID
 else
  PremiumUser U on U.User_Id = F.User_ID
end

无论如何都要实现这个目标吗?

我知道可以做到这样的事情

   select 
      f.id,
      case when userkey=0 then l.name else p.name end as username
    from [feature] f
    left join [liteuser] l on l.user_id = f.user_id
    left join [premium user] p on p.user_id = f.user_id

但由于我有大表,我不想加入这两个表。 我希望有选择地加入表格

1 个答案:

答案 0 :(得分:3)

不,你不能有选择地加入标准的TSQL(对于MS SQL来说肯定是正确的,我很确定它对Oracle和MySQL都是如此)。

但是您可以将条件放入连接中。这将允许SQL非常快速地忽略连接,因为它将按顺序评估条件:

select 
  f.id,
  case when userkey=0 then l.name else p.name end as username
from [feature] f
left join [liteuser] l 
       on condition1 = 1 
      AND l.user_id = f.user_id
left join [premium user] p 
       on condition1 = 2
      and p.user_id = f.user_id