SQL加入多个条件

时间:2015-07-13 17:56:52

标签: sql join

假设你有一个类似的查询:

Select A.column1, A.column2, B.column3
from Table1 as A left join Table2 as B
on (A.column1=B.column3 or A.column2=B.column3)

这与两个查询的串联相同:

Select A.column1, A.column2, B.column3
from Table1 as A left join Table2 as B
on (A.column1=B.column3)

Select A.column1, A.column2, B.column3
from Table1 as A left join Table2 as B
on (A.column2=B.column3)

或者决赛桌会有差异吗?

3 个答案:

答案 0 :(得分:1)

这两个查询将具有相同的结果集:

Select DISTINCT A.column1, A.column2, B.column3
from Table1 A left join
     Table2 as B
     on A.column1 = B.column3 or A.column2 = B.column3;

Select A.column1, A.column2, B.column3
from Table1 A left join
     Table2 B
     on A.column1 = B.column3
union  -- Note:  NOT UNION ALL
Select A.column1, A.column2, B.column3
from Table1 A left join
     Table2 B
     on A.column2 = B.column3 ;

如果没有distinctunion,您可能会在查询之间出现(或不存在)各种重复项。

答案 1 :(得分:0)

我认为你的意思与表的联合相同,因为SQL中没有连接

不,它们不会相同 - 如果有A.column1 = B.column3A.column2 = B.Column3

的行,联盟有机会重复

答案 2 :(得分:0)

是使用UNION或UNION ALL取决于您想要的结果(UNION ALL更快但可能包含重复项)。任何一个通常使用OR更快。只需确保为两者运行结果集,然后选择与原始查询具有相同结果的结果集。