我无法理解这个查询结果中查询。为什么重复的记录
SELECT COUNT(*) FROM profiles
WHERE profiles.status IN ('abc', 'man')
AND profiles.id IN (
SELECT artifacts.item_id FROM artifacts
WHERE artifacts.deleted_at IS NULL
AND artifacts.item_type = 'Profile'
AND artifacts.upload_type = 'bill'
);
count
-------
12514
(1 row)
上面的查询计数配置文件的重复记录(为此,工件有多个记录)。当我以不同的方式运行上述查询时,我会得到正确的计数,如下所示。
SELECT COUNT(DISTINCT(id)) FROM profiles
WHERE profiles.status IN ('abc', 'man')
AND profiles.id IN (
SELECT artifacts.item_id FROM artifacts
WHERE artifacts.deleted_at IS NULL
AND artifacts.item_type = 'Profile'
AND artifacts.upload_type = 'bill'
);
count
-------
12157
(1 row)
工件可以对同一配置文件有多个记录。但根据我的理解IN
查询不会让任何重复的配置文件进入计数。我对吗?还是有什么我失踪?
UPDATE:
我试图查询减少到2个不同的过滤条件。这两个条件都很好。如下请见。
=> SELECT COUNT(*) FROM profiles WHERE profiles.id IN (
SELECT artifacts.item_id FROM artifacts
WHERE artifacts.deleted_at IS NULL
AND artifacts.item_type = 'Profile'
AND artifacts.upload_type = 'bill');
count
-------
22664
(1 row)
=> SELECT COUNT(DISTINCT(id)) FROM profiles WHERE profiles.id IN (
SELECT artifacts.item_id FROM artifacts
WHERE artifacts.deleted_at IS NULL
AND artifacts.item_type = 'Profile'
AND artifacts.upload_type = 'bill');
count
-------
22664
(1 row)
=> SELECT COUNT(DISTINCT(id)) FROM profiles
WHERE profiles.status IN ('abc', 'man');
count
-------
20109
(1 row)
=> SELECT COUNT(*) FROM profiles
WHERE profiles.status IN ('abc', 'man');
count
-------
20109
时一起选择使用两种IN
查询,以便发生重复。有没有人熟悉这种用例。
这是一个愚蠢的问题 - 你有任何机会在配置文件表中有重复的id? – paqash
@paqash不可能。 Id是主键。 – dnsh
尝试运行'SELECT ID从配置......除了选择不重复的ID从profiles..'得到“没有明显的ID”的名单?.. –