使用条件(OR)交叉的SELECT JOIN

时间:2019-02-14 18:27:46

标签: mysql sql join left-join

我需要做这样的事情(在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是否为空。

1 个答案:

答案 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中匹配项的行。我认为这是理想的。

此外,ORIN可能会对JOIN的效果产生不利影响,但您不必担心性能。