[英]SQL select entire record found in group
我利用PostgreSQL中的metaphone函數來查找可能被拼寫錯誤的重復記錄。
SELECT metaphone(first_name, 4), metaphone(last_name, 4)
FROM people GROUP BY metaphone(last_name, 4),
metaphone(first_name, 4) HAVING COUNT(*) > 1;
這非常適合向我顯示數據庫中至少有100個潛在重復項,但是我無法做到這一點,因為我無法從查詢結果中獲得任何唯一標識信息。 我已經試過了:
SELECT person_id, first_name, last_name
FROM people
WHERE metaphone(first_name, 16) IN (
SELECT metaphone(first_name, 16)
FROM people GROUP BY metaphone(last_name, 16),
metaphone(first_name, 16) HAVING COUNT(*) > 1
)
AND metaphone(last_name, 16) IN (
SELECT metaphone(last_name, 16)
FROM people GROUP BY metaphone(last_name, 16),
metaphone(first_name, 16) HAVING COUNT(*) > 1
)
ORDER BY last_name, first_name;
哪種作品,但仍然包含一些實際上兩個字段都不匹配的記錄。 例如,我可以有2個“ John Smith”,2個“ Jane Smith”和2個“ John Doe”。 我可能只有一個'Jane Doe',但她會出現在第二個查詢的結果中。
有什么方法可以更准確地僅獲取用於編譯第一個查詢結果的行?
您需要一次進行兩個比較:
SELECT person_id, first_name, last_name
FROM people
WHERE (metaphone(first_name, 16), metaphone(last_name, 16)
) IN (SELECT metaphone(first_name, 16), metaphone(last_name, 16)
FROM people
GROUP BY metaphone(first_name, 16), metaphone(last_name, 16),
HAVING COUNT(*) > 1
)
ORDER BY last_name, first_name;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.