我认为相同的两个查询返回不同的结果

时间:2015-11-11 19:34:48

标签: sql postgresql

所以我显然没有正确地思考这个问题。我正在使用postgres。我正在检查我的数据库是否有任何重复的(latitude, longitude)对。为此,我只是得到了计数:

SELECT SUM(dups.inner_count) 
FROM 
  (
    SELECT latitude, longitude, COUNT(*) as inner_count 
    FROM company 
    GROUP BY latitude, longitude 
    HAVING COUNT(*) > 1
  ) as dups;

此查询返回的结果与此不同:

SELECT COUNT(*) 
FROM company 
WHERE (latitude, longitude) 
IN 
  (
    SELECT latitude, longitude 
    FROM company 
    GROUP BY latitude, longitude 
    HAVING COUNT(*) > 1
  );

我觉得这些应该已经归来了所以现在我很困惑。我还没喝咖啡,所以我觉得我可能只是做了些蠢事。这些不同吗?

2 个答案:

答案 0 :(得分:0)

您的第一个示例是返回子查询返回的所有inner_count值的总和;第二个示例是子查询返回的行数。他们要求不同的东西,因此可以预期它们会返回两个不同的值。

答案 1 :(得分:0)

回答我自己的问题,感谢@GordonLinoff,postgres

  

IN语句将与field = val1或field = val2完全相同地进行解析   或field = val3。在那里放一个null将归结为field = null   哪个不行。

所以第一个查询有~88000 null latitudelongitude,这些都没有被考虑到第二个查询中。我没疯。你每天都学到新东西