2013-01-16 103 views
0

我有一個DB構建如下: 無效表 - 包括所有被刪除\非活動用戶 活動表 - 包括所有當前活動的用戶 主表 - 包括所有用戶(活動和非活動)條件內連接

所有三個表中都存在一些字段(例如userName),我想從Inactive或Active表中取數據(因爲所有表中的數據並不總是相等的),所以我想要有一個聯接它將來自Active表或Inactive表(根據主表中的ActiveState字段)

我的查詢很複雜,b UT簡化它,我有一個小例子說明我的問題:

SELECT M.ID, 
     A.userName 
FROM MainTbl M 

IF M.ActiveState = 'Active' 
    THEN 
    INNER JOIN ActiveTbl A ON A.UserID = M.ID 
ELSE 
    INNER JOIN InactiveTbl A ON A.UserID = M.ID 
END 
    INNER JOIN SomeTbl S ON S.Field = A.Field 

注:因爲我使用的兩個表,原因是使用該表的選擇本身和一些更多的內部聯接

有沒有辦法做到這一點?

感謝

+2

因爲用戶不能有效和無效的同時,爲什麼不加入我們主包含兩個表的表格,並將其合併。 –

+0

你不可以將同一個別名('A')同時指定爲'ActiveTbl'和'InactiveTbl'。 – David

回答

0

使用LEFT JOIN的INNER而不是JOIN,然後是這樣的:

SELECT CASE WHEN A.ID IS NULL 
      THEN I.userName 
      ELSE ActiveTbl.userName 
     END AS userName 
FROM MainTbl M 
     LEFT JOIN ActiveTbl A 
       ON A.UserID = M.ID 
       AND m.ActiveState = 'Active' 
     LEFT JOIN InactiveTbl I 
       ON I.UserID = M.ID 
+0

但它應該是同一封信... 我的查詢比我給出的例子要複雜得多... 我有更多的內部連接應該與這些表中的一個(在END之後,你可以看到有一個內部連接到「SomeTbl」通過A,可能是活動或不活動表) –

+0

@DH_Prog已更新回答 – twoleggedhorse

0
SELECT CASE M.ActiveState 
      WHEN 'Active' THEN A.userName 
      ELSE I.userName 
     END AS userName 
FROM MainTbl M 
     LEFT JOIN ActiveTbl A 
      ON A.UserID = M.ID 
     LEFT JOIN InactiveTbl I 
      ON I.UserID = M.ID