PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

wyszukaj duplikaty z różnych pól w postgresql

Aby znaleźć wszystkie wiersze ze zduplikowanymi numerami telefonów (w różnych kolumnach):

SELECT *
FROM   contacts c
WHERE  EXISTS (
   SELECT FROM contacts x
   WHERE  x.mobile_phone IN (c.mobile_phone, c.home_phone)
       OR x.home_phone   IN (c.mobile_phone, c.home_phone)
   AND x.contact_id <> c.contact_id  -- except self
   );

Aby znaleźć wszystkie zduplikowane numery telefonów w dwóch kolumnach:

SELECT DISTINCT phone
FROM  (
   SELECT mobile_phone AS phone
   FROM   contacts c
   WHERE  EXISTS (
      SELECT FROM mobile_phone x
      WHERE  c.mobile_phone IN (x.mobile_phone, x.home_phone)
      AND    c.contact_id <> x.contact_id  -- except self
      )
   UNION ALL
   SELECT home_phone
   FROM   contacts c
   WHERE  EXISTS (
      SELECT FROM mobile_phone x
      WHERE  c.home_phone = x.home_phone   -- cross-over covered by 1s SELECT
      AND    c.contact_id <> x.contact_id  -- except self
      )
   ) sub;

Powtarzanie tej samej liczby w obu kolumnach tego samego wiersza nie kwalifikuje się. Nie sądzę, że chciałbyś je uwzględnić. (Nadal byłby to szum, którego warto zabronić za pomocą CHECK ograniczenie.)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Adnotacja Spring Data @CreatedDate nie działa dla mnie

  2. Zapętlaj tabele z PL/pgSQL w Postgres 9.0+

  3. postgresql aktualizuje wiele tabel w jednym zapytaniu

  4. Sekwencja PostgreSQL oparta na innej kolumnie

  5. ogólny błąd sql