SQL-код, который подтвердит, что 2 столбца таблицы «синхронизированы», если не помечены - PullRequest
1 голос
/ 19 марта 2012

У меня возникли проблемы с написанием SQL для этого сценария.

Например, для данной таблицы (это просто для упрощения и маскировки фактических данных ...), ContactInfo, она имеет 2 столбца Address и Phone. Я хотел бы написать sql, который подтвердит, что при заданном адресе телефон всегда будет одинаковым для этого адреса (следовательно, «синхронизирован») и, если это не так, отметьте его:

enter image description here

Таким образом, в этом примере, если лица Abc и Def имеют один и тот же адрес, их телефон должен быть одинаковым (т. Е. Только один номер стационарного телефона у резидента), и этот человек Klm должен быть помечен, поскольку он живет в том же подразделении, но имеет другой Телефон.

*** Таблица денормализована, но так оно и есть, нормализация не вариант ...

Это для Sybase 12.5 ASE.

Ответы [ 2 ]

2 голосов
/ 19 марта 2012

Ну

Вы можете попробовать это

SELECT a.*, b.*
FROM ContactInfo a
  INNER JOIN ContactInfo b on a.address = b.address
WHERE a.phone != b.phone

Некоторые SQL предпочитают <> !=

Это даст вам любые записи, которые соответствуют адресу, но не соответствуют номеру телефона. Таким образом, он покажет Abc & KLM и DEF и Klm (но не Abc & Def).

Вы не можете сказать, что верно здесь - возможно, Klm - правильный номер телефона, и abc и def перешли. Или, может быть, у Klm есть мобильный телефон.

0 голосов
/ 19 марта 2012

Я бы предпочел указать только неправильный адрес, например:

SELECT distinct a.Address
FROM ContactInfo a
  INNER JOIN ContactInfo b on a.Address = b.Address
WHERE a.Phone != b.Phone
...