这两个查询之间有什么区别

时间:2013-06-20 10:25:05

标签: sql sql-server-2008 inner-join

- 查询1

select distinct af.Code from AIR af inner join
Float spf on spf.Station = af.AirID or
spf.DeptStation = af.AirID

- 查询2

select distinct af.Code from AIR af 
    inner join Float spf on spf.Station = af.AirID
    inner join Float spf1 on spf.DeptStation = af.AirID

在第一个查询中,与第二个相比,我得到了更多的条目(大约10个)。按照我的说法,这种差异不应该存在。如果有人可以分解查询以告诉我差异(如果有的话),那将会有所帮助。

2 个答案:

答案 0 :(得分:0)

此查询:

select distinct af.Code from AIR af 
inner join Float spf on spf.Station = af.AirID
inner join Float spf1 on spf1.DeptStation = af.AirID

等于“和”加入

select distinct af.Code from AIR af
inner join Float spf on spf.Station = af.AirID and spf.DeptStation = af.AirID

修改 您的第二个查询出错了。它应该是

  

内部连接spf1.DeptStation上的浮点spf1 = af.AirID

答案 1 :(得分:0)

在第二个查询中,您将一个AirID前排与两个不同的值同时匹配(AND) 因此,JOIN仅在两者匹配时给出结果,这当然是无意义的。

在第一个查询中,您将一个AirID与 一个<2>个不同列(OR)匹配 因此,当您匹配

时,您会得到正确的结果

你可以重写第一个,这可能有助于演示OR-ness

select af.Code from AIR af 
    inner join Float spf on spf.Station = af.AirID
UNION
select af.Code from AIR af 
    inner join Float spf on spf.DeptStation = af.AirID