所以我显然没有正确地思考这个问题。我正在使用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
);
我觉得这些应该已经归来了所以现在我很困惑。我还没喝咖啡,所以我觉得我可能只是做了些蠢事。这些不同吗?
答案 0 :(得分:0)
您的第一个示例是返回子查询返回的所有inner_count值的总和;第二个示例是子查询返回的行数。他们要求不同的东西,因此可以预期它们会返回两个不同的值。
答案 1 :(得分:0)
回答我自己的问题,感谢@GordonLinoff,postgres
:
IN
语句将与field = val1或field = val2完全相同地进行解析 或field = val3。在那里放一个null将归结为field = null 哪个不行。
所以第一个查询有~88000 null latitude
和longitude
,这些都没有被考虑到第二个查询中。我没疯。你每天都学到新东西