我正在尝试将字段(表1中)加入表2或表3,具体取决于表1中另一个字段的值。
我的COMM表(1)如下所示:
CommID User ID Type
100 987 SER
101 123 EMP
SER
(2)和EMP
(3)会向我提供有关这些用户的信息。我需要将COMM表中的User ID
加入SER
和EMP
,并依赖于Type
中的COMMM
字段。这不起作用,但可以说明我想要做的事情:
SELECT *
CASE
WHEN comm.type = 'SER' THEN ser.userName
ELSE emp.userName
END
FROM COMM
LEFT JOIN SER on SER.userID = comm.UserID and comm.type = 'SER'
LEFT JOIN EMP on EMP.userID = comm.UserID and comm.type = 'EMP'
有什么想法吗?
答案 0 :(得分:2)
您应该将*
列限制为comm
中的列,然后添加其他表中的列:
select comm.*,
CASE WHEN comm.type = 'SER' THEN ser.userName ELSE emp.userName END
FROM COMM
LEFT JOIN SER on SER.userID = comm.UserID and comm.type = 'SER'
LEFT JOIN EMP on EMP.userID = comm.UserID and comm.type = 'EMP'
答案 1 :(得分:0)
我个人会在这种情况下使用UNION
- probalby UNION ALL
:
SELECT
comm.*,
ser.userName
FROM
comm
JOIN
SER
ON
SER.userID = comm.UserID
WHERE
comm.type = 'SER'
UNION ALL
SELECT
comm.*,
emp.userName
FROM
coom
JOIN
emp
ON
emp.userID = comm.UserID
WHERE
comm.type = 'EMP'
;
这将适用于两个表中的类型是兼容的(如果是用户名的话)。
UNION ALL
选择SELECTS
中的所有行 - 它不会排除重复项(我认为这里可能不是真正的副本)。