我想这个问题以前可能已经回答过了,但我找不到:我发现的所有结果都不是这个问题的解决方案。
让我们假设我的数据库有以下表和关系(我不能更改它们):
我有这样的疑问:
SELECT U.LOGIN, WG.WORKGROUP, Q.QUEUE
FROM USER U, M2M_USER_WG MUW, WORKGROUP W, M2M_WG_QUEUE MWQ, QUEUE Q
WHERE U.ID = MUW.WORKGROUP2USER
AND W.ID = MUW.USER2WORKGROUP
AND W.ID = MWQ.QUEUE2WORKGROUP
AND Q.ID = MWQ.WORKGROUP2QUEUE
AND U.LOGIN = 'johndoe'
当所有实体都有现有值时,此查询工作良好,但假设用户只有一个工作组,而该工作组没有任何队列。工作组的ID将不存在于表M2M_WG_QUEUE (MWQ)中,因此查询不会显示结果。
我希望看到的是用户和他的工作组,即使其中一些没有队列。就像这样:
USER WORKGROUP QUEUE
johndoe WG3 Q7
johndoe WG3 Q8
johndoe WG4 Q7
johndoe WG9
在上面的示例中,结果应该如下所示:
USER WORKGROUP QUEUE
johndoe WG6
我怎么能这么做?我想也许可以用一个连接或(+)来完成,但我已经尝试过几种方法,但它们都不起作用.
发布于 2018-05-25 02:37:10
不要在FROM
子句中使用逗号。始终使用正确、显式、标准的JOIN
语法。专业人士
您的问题是您需要一个LEFT JOIN
,大概是:
SELECT U.LOGIN, WG.WORKGROUP, Q.QUEUE
FROM USER U LEFT JOIN
M2M_USER_WG MUW
ON U.ID = MUW.WORKGROUP2USER LEFT JOIN
WORKGROUP W
ON W.ID = MUW.USER2WORKGROUP LEFT JOIN
M2M_WG_QUEUE MWQ
ON W.ID = MWQ.QUEUE2WORKGROUP LEFT JOIN
QUEUE Q
ON Q.ID = MWQ.WORKGROUP2QUEUE
WHERE U.LOGIN = 'johndoe';
https://stackoverflow.com/questions/50527229
复制相似问题