2013-12-17 111 views
1

我有一種情況,我只需要在特定條件下加入表格。
讓我們的承銷方案根據條件加入表

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或精簡版用戶一次只能加入1臺。

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 

,但因爲我有巨大的表,我不想參加這兩個表。 我想要有選擇地加入表

+0

_mention的RDBMS_ –

+0

問題的部分似乎是你的數據結構。您應該考慮將所有用戶放入單個數據庫,然後使用列(外鍵,偶數)標記「用戶類型」。如果您正在複製表格結構,那麼這表示您的方法可能存在問題。 – JDB

+0

這不是我的確切數據庫設計..這是相當巨大,非常不同....這只是一個樣本,我從某處解釋我的問題.. – Gautam

回答

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 
+0

感謝格雷格...工作像魅力.. – Gautam