0

我有一个如下构建的数据库: 非活动表 - 包括所有已删除\非活动用户 活动表 - 包括所有当前活动用户 主表 - 包括所有用户(活动和非活动)

所有三个表中都存在一些字段(例如用户名),我想从非活动或活动表中获取数据(因为所有表中的数据并不总是相等),所以我想要一个连接将来自活动表或非活动表(根据主表中的 ActiveState 字段)

我的查询非常复杂,但为了简化它,我有一个小例子来解释我的问题:

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

注意: 对于我使用 A 的两个表,原因是我将此表用于选择本身和一些更多的内部连接

有什么办法吗?

谢谢

4

2 回答 2

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
于 2013-01-16T09:38:02.630 回答
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
于 2013-01-16T09:43:56.327 回答