sql >> Database teknologi >  >> RDS >> PostgreSQL

søg efter krydsfeltsdubletter i postgresql

Sådan finder du alle rækker med (tværspalte) duplikerede telefonnumre:

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

Sådan finder du alle duplikative telefonnumre på tværs af de to kolonner:

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;

Gentag det samme tal i begge kolonner i samme række kvalificerer sig ikke. Jeg tror ikke, du vil inkludere dem. (Ville stadig være støj, der kan være værd at afvise med en CHECK begrænsning.)



  1. Generering af SQL*Plus-script ved hjælp af SQL*Plus

  2. MySQL-heltalssammenligning ignorerer efterfølgende alfategn

  3. Importerer JSON til Mysql

  4. Sådan grupperer du forskellige fora i PHP-kategorier