使用连接时,SQL Server count()返回不同的结果

时间:2015-03-24 20:32:36

标签: sql sql-server

我是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

2 个答案:

答案 0 :(得分:3)

  

INNER JOIN:当BOTH表中至少有一个匹配时返回所有行。

     

LEFT JOIN:返回左表中的所有行,以及右表中匹配的行。

     

RIGHT JOIN:返回右表中的所有行,以及左表中匹配的行。

     

FULL JOIN:当其中一个表中存在匹配时返回所有行。

您正在使用内部联接,这就是为什么您从实际count()结果中得到错误结果的原因。 如果您想从左表中获取所有记录,则必须在此查询中使用left join,然后您将获得count()与主表[left table]相同的结果

答案 1 :(得分:1)

你要么

  • Road表中具有相同Car_ID或
  • 的多个记录
  • 道路表中具有相同Garage_ID或
  • 的多个记录
  • 以上两个

你可以运行以下内容来获得你想要的东西(假设道路和车库表总是匹配):

 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