我是SQL Server的新手,我不是在寻找解决方案(但它可能会帮助其他人),相反,我想了解行为/为什么我从下面的两个伪查询得到两个不同的结果。
我加入另外两张桌子的原因是因为我需要将“车辆”中的所有项目计算在“车库”中的“Date_Recorded”中。所有记录自2010年以来。所以在我这样做之前,我想确保我从表'Car'获得相同的总数并且在连接中获得相同的结果,然后我在'车库'条件下添加'isDate' ,那是我注意到结果的差异。
我原以为连接会被忽略?
希望有人可以提供建议吗?提前谢谢!
SELECT count(Car.CAR_ID) AS Car_ID
FROM Vehicle Car
INNER JOIN Road Rd
ON Car.CAR_ID = Rd.CAR_ID
JOIN Garage g
ON Rd.GARAGE_ID = g.GARAGE_ID
----------------------------------------------
Car_ID
----------------------------------------------
226923
SELECT count(Car.CAR_ID) AS Car_ID
FROM Vehicle Car
----------------------------------------------
Car_ID
----------------------------------------------
203417
答案 0 :(得分:3)
INNER JOIN:当BOTH表中至少有一个匹配时返回所有行。
LEFT JOIN:返回左表中的所有行,以及右表中匹配的行。
RIGHT JOIN:返回右表中的所有行,以及左表中匹配的行。
FULL JOIN:当其中一个表中存在匹配时返回所有行。
您正在使用内部联接,这就是为什么您从实际count()
结果中得到错误结果的原因。
如果您想从左表中获取所有记录,则必须在此查询中使用left join
,然后您将获得count()
与主表[left table]
相同的结果
答案 1 :(得分:1)
你要么
你可以运行以下内容来获得你想要的东西(假设道路和车库表总是匹配):
SELECT count(Distinct Car.CAR_ID) AS Car_ID
FROM Vehicle Car
INNER JOIN Road Rd
ON Car.CAR_ID = Rd.CAR_ID
JOIN Garage g
ON Rd.GARAGE_ID = g.GARAGE_ID