我有一个如下构建的数据库: 非活动表 - 包括所有已删除\非活动用户 活动表 - 包括所有当前活动的用户 主表 - 包括所有用户(活动和非活动)
所有三个表中存在一些字段(例如userName),我想从非活动表或活动表中获取数据(因为所有表中的数据并不总是相等),所以我希望有一个连接,它将来自Active表或Inactive表(根据主表中的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的两个表,原因是我将此表用于select本身以及更多内部联接
有没有办法这样做?
由于
答案 0 :(得分: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
答案 1 :(得分: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