SQL连接条件

时间:2014-11-14 19:21:49

标签: sql if-statement join conditional case

我正在尝试将字段(表1中)加入表2或表3,具体取决于表1中另一个字段的值。

我的COMM表(1)如下所示:

CommID  User ID  Type
100     987      SER
101     123      EMP

SER(2)和EMP(3)会向我提供有关这些用户的信息。我需要将COMM表中的User ID加入SEREMP,并依赖于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'

有什么想法吗?

2 个答案:

答案 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中的所有行 - 它不会排除重复项(我认为这里可能不是真正的副本)。