我需要做这样的事情(在MySQL中),我使用UNION的尝试直到现在才起作用。
理论上:

SELECT * FROM
tableA A

JOIN tableB B ON A.tableAId = B.tableAId

LEFT JOIN tableC C ON C.tableAId = A.tableAId

LEFT JOIN tableD D ON D.tableAId = A.tableAId

JOIN tableE E
ON (C.tableEId = E.tableEId OR D.tableEId = E.tableEId)

预期结果是A与B交叉,可选C与A交叉,可选D与A交叉,如果id在C或D上,则得到E结果。
为了知道找到的记录是来自C还是D,我使用了if检查tableCId还是tableDId是否为空。

最佳答案

我想你的代码会起作用的。

SELECT *
FROM tableA A JOIN
     tableB B
     ON A.tableAId = B.tableAId LEFT JOIN
     tableC C
     ON C.tableAId = A.tableAId LEFT JOIN
     tableD D
     ON D.tableAId = A.tableAId JOIN
     tableE E
     ON E.tableEId IN (C.tableEId, D.tableEId);

这将过滤掉C和D中没有匹配项的行,以及C/D中匹配项不在E中的行。我认为这是可取的。
此外,ORIN可能会对JOIN性能产生不良影响,但您不会将性能作为关注点。

08-07 00:32