我無法理解這個查詢結果中查詢。爲什麼重複的記錄
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」的名單?.. –