sql >> Databáze >  >> RDS >> PostgreSQL

hledejte duplikáty napříč poli v postgresql

Chcete-li najít všechny řádky s (křížovými) duplicitními telefonními čísly:

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

Chcete-li najít všechna duplicitní telefonní čísla ve dvou sloupcích:

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;

Opakování stejného čísla v obou sloupcích stejného řádku nekvalifikuje se. Nemyslím si, že byste je chtěl zahrnout. (Stále by to byl hluk, který by stálo za to zakázat pomocí CHECK omezení.)



  1. provádění funkce v sql plus

  2. Jak získat počet dní v měsíci v MySQL

  3. Pochopení systémových sloupců v PostgreSQL

  4. Jak načíst referenční kurzor Oracle do proměnné tabulky?