PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

търсене на дубликати на кръстосани полета в postgresql

За да намерите всички редове с дублиращи се телефонни номера (колона в кръст):

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

За да намерите всички дублиращи се телефонни номера в двете колони:

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;

Повтаряне на едно и също число в двете колони на един ред не отговаря на изискванията. Не мисля, че бихте искали да ги включите. (Все пак ще има шум, който може да си струва да забраните с CHECK ограничение.)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 2 начина за връщане на редове, които съдържат само буквено-цифрови знаци в PostgreSQL

  2. Как да използвам Java компонента Embedded PostgreSQL Server като отделна услуга?

  3. WhereRaw Laravel с променлива

  4. Доклад на Jasper:не може да получи стойност за поле „x“ от клас „org.postgresql.util.PGmoney“

  5. Репликация на Londiste с PostgreSQL 9.0