PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

cari duplikat lintas bidang di postgresql

Untuk menemukan semua baris dengan nomor telepon duplikat (lintas kolom):

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
   );

Untuk menemukan semua nomor telepon duplikat di dua kolom:

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;

Mengulangi angka yang sama di kedua kolom dari baris yang sama tidak memenuhi syarat. Saya tidak berpikir Anda ingin memasukkan itu. (Masih akan menjadi suara bising yang mungkin perlu dilarang dengan CHECK kendala.)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL JDBC Null String diambil sebagai byte

  2. Cara menghitung retensi bulan ke bulan menggunakan SQL

  3. Bagaimana Membandingkan Dua Skema di PostgreSQL

  4. Kesalahan mikro-orm:otentikasi kata sandi gagal untuk postgres pengguna

  5. Tidak dapat menjatuhkan tabel temp di fungsi Postgres:digunakan oleh kueri aktif di sesi ini