Mysql 选择使用条件(或)交叉连接
我需要做一些类似的事情(在MySQL中),我使用UNION的尝试直到现在才起作用 理论上:Mysql 选择使用条件(或)交叉连接,mysql,sql,join,left-join,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
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。我认为您的代码可以工作
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中的行
另外,
或
和中的可能会对连接
性能产生不良影响,但您没有提到性能问题。@GordonLinoff我知道,但查询确实很难理解,这是逻辑的1%,数据非常繁重。能帮我做一个功能图吗?哈哈!!!天啊!!!真正的查询是如此强烈,以至于我在这里使用的示例中从未试图简化它。(我还在数据中发现了一个错误)。无论如何,我从来没有想过在中,我更喜欢它而不是我的方法,因为我有几个带有这些可选条件的表。非常感谢戈登!!!是的,我知道它的性能:(但我不知道在不改变整个结构的情况下是否可以改进它。