我需要做这样的事情(在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是否为空。
答案 0 :(得分:1)
我认为您的代码可以使用。
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
的效果产生不利影响,但您不必担心性能。