繁体   English   中英

如果两个表中的任何一个满足条件,则MySQL JOIN

[英]MySQL JOIN if either of the 2 tables meets condition

SELECT COALESCE(table2.value, table3.value) FROM table1
JOIN table2 ON (table1.value = table2.value)
JOIN table3 ON (table1.value = table3.value)

table1.value = table2.valuetable1.value = table3.value是互斥的(最多其中一个是真的)。

仅当table1.value = table2.valuetable1.value = table3.value为true时,如何才能进行连接?

这是唯一的解决方案吗? (这很乏味)

SELECT table.value FROM table1
JOIN 
(SELECT COALESCE(table2.value, table3.value) FROM table1
 LEFT JOIN table2 ON (table1.value = table2.value)
 LEFT JOIN table3 ON (table1.value = table3.value)
) as table ON (table1.value = table.value)

您可以使用两个查询和UNION它们,例如:

SELECT COALESCE(table1.value, table2.value) FROM table1
JOIN table2 ON (table1.value = table2.value)

UNION

SELECT COALESCE(table1.value, table3.value) FROM table1
JOIN table3 ON (table1.value = table3.value)

尝试使用内连接和联合两个表

SELECT * FROM
(SELECT value, data FROM table1) as a
INNER JOIN
(SELECT value, data FROM table2) as b
ON b.value = a.value
UNION ALL
(SELECT value, data FROM table1) as a
INNER JOIN
(SELECT value, data FROM table3) as b
ON b.value = a.value

Inner JOIN将避免连接两个为NULL的表,它只会加入那些在两个表上都有完全查找的行。 在UNION中我们假设在第一个JOIN中,另一个table3将不会被包含在那里,所以将它作为单独的连接和UNION它或将它合并到第一个,这样你就可以在一个查询/表上获得所有数据只要记住使用UNION,所有结果都应该具有您想要获取的确切名称或字段。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM