簡體   English   中英

SQL選擇組中找到的整個記錄

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM