Để tìm tất cả các hàng có số điện thoại trùng lặp (cột chéo):
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
);
Để tìm tất cả các số điện thoại trùng lặp trên hai cột:
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;
Lặp lại cùng một số trong cả hai cột của cùng một hàng không đủ điều kiện. Tôi không nghĩ rằng bạn muốn bao gồm những thứ đó. (Vẫn sẽ là tiếng ồn mà có thể không được phép nếu CHECK
ràng buộc.)