0

--查询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 个)。在我看来,这种差异不应该存在。如果有人可以分解查询以告诉我差异(如果有的话),那将会很有帮助。

4

2 回答 2

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

编辑 您的第二个查询出错。它应该是

内部连接 ​​Float spf1 on spf1.DeptStation = af.AirID

于 2013-06-20T10:32:09.070 回答
0

在第二个查询中,您将一个 AirID 前行同时匹配到 2 个不同的值( 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
于 2013-06-20T10:43:20.143 回答