So finden Sie alle Zeilen mit (spaltenübergreifenden) doppelten Telefonnummern:
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
);
So finden Sie alle doppelten Telefonnummern in den beiden Spalten:
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;
Wiederholen der gleichen Zahl in beiden Spalten der gleichen Zeile qualifiziert sich nicht. Ich glaube nicht, dass Sie diese einbeziehen möchten. (Wäre immer noch Rauschen, das es wert wäre, mit einem CHECK
nicht zugelassen zu werden Einschränkung.)