Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 选择使用条件(或)交叉连接_Mysql_Sql_Join_Left Join - Fatal编程技术网

Mysql 选择使用条件(或)交叉连接

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

我需要做一些类似的事情(在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。

我认为您的代码可以工作

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%,数据非常繁重。能帮我做一个功能图吗?哈哈!!!天啊!!!真正的查询是如此强烈,以至于我在这里使用的示例中从未试图简化它。(我还在数据中发现了一个错误)。无论如何,我从来没有想过在中,我更喜欢它而不是我的方法,因为我有几个带有这些可选条件的表。非常感谢戈登!!!是的,我知道它的性能:(但我不知道在不改变整个结构的情况下是否可以改进它。