我需要做这样的事情(在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是否为null。
发布于 2019-02-15 02:33:46
我认为你的代码会工作的。
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中的行。我假设这是所需的。
此外,OR和IN可能会对JOIN性能产生不良影响,但是您没有提到性能问题。
https://stackoverflow.com/questions/54696880
复制相似问题