在mysql连接上使用或

在mysql连接上使用或,mysql,join,Mysql,Join,有没有一种方法可以指定一个mysql查询来执行类似的操作 SELECT * FROM a LEFT JOIN b ON (a.xyz = b.xyz OR a.xyr = b.xyr); 因此,当on语句上的任何左连接条件匹配时,返回行 如果是这样,这种查询的语法是什么?根据ON子句是一个条件表达式。所以是的,您可以使用这样的表达式。事实上,正是你所拥有的应该起作用 但是,根据您的数据和联接类型,它可能会产生一些不直观的结果。将select语句拆分为两部分并使用并集 SELECT * FROM

有没有一种方法可以指定一个mysql查询来执行类似的操作

SELECT * FROM a LEFT JOIN b ON (a.xyz = b.xyz OR a.xyr = b.xyr);
因此,当on语句上的任何左连接条件匹配时,返回行

如果是这样,这种查询的语法是什么?

根据
ON
子句是一个条件表达式。所以是的,您可以使用这样的表达式。事实上,正是你所拥有的应该起作用


但是,根据您的数据和联接类型,它可能会产生一些不直观的结果。

将select语句拆分为两部分并使用并集

SELECT * FROM a LEFT JOIN b on a.xyz = b.xyz
UNION
SELECT * FROM a LEFT JOIN b on a.xyr = b.xyr

如果MySQL中的UNION与SQL Server中的UNION类似,那么它应该生成一个没有重复行的集合。否则,您可能需要使用DISTINCT.

与左连接,即使
b
中没有与
a
中的当前行匹配的行,您也可以获得数据。你可能只需要加入。如前所述,您可以很好地使用显示的语法。有时候,尝试这些事情比问问题要快…但是如果你想在整个事情上写一个WHERE、GROUP BY、SUM等怎么办?如何使两者都受到影响将整个union语句包装到子查询中,然后应用必要的语句。根据所需的结果,在联合之前,甚至可以在各个select级别上使用WHERE和AGGRATE STATEMENTS。