2013-06-12 19 views
1

我有一個表(客戶),其中包含字段telephone_1,telephone_2,telephone_3 & telephone_4。顯示跨多個列的重複條目的完整記錄

我需要看到的是其他客戶使用任何電話號碼的完整記錄 - 因爲我認爲某處的數據出現問題,客戶號碼相互重複!

我已經嘗試了下面的代碼,但是這並沒有給我我想要的只是比較1/1,2/2,3/3 & 4/4。我有一個可用於區分記錄的ID字段。

SELECT * 
FROM Customers AS a 
WHERE 1 < (SELECT Count(*) 
FROM Customers AS b 
WHERE a.Telephone_1 = b.Telephone_1 
    OR a.Telephone_2 = b.Telephone_2 
    OR a.Telephone_3 = b.Telephone_3 
    OR a.Telephone_4 = b.Telephone_4 

任何幫助表示讚賞 - 謝謝!

回答

0

這個怎麼樣?

SELECT * 
FROM Customers AS a 
WHERE 1 < (
    SELECT Count(*) 
    FROM Customers AS b 
    WHERE a.Telephone_1 IN (b.Telephone_1, b.Telephone_2, b.Telephone_3, b.Telephone_4) 
    OR a.Telephone_2 IN (b.Telephone_1, b.Telephone_2, b.Telephone_3, b.Telephone_4) 
    OR a.Telephone_3 IN (b.Telephone_1, b.Telephone_2, b.Telephone_3, b.Telephone_4) 
    OR a.Telephone_4 IN (b.Telephone_1, b.Telephone_2, b.Telephone_3, b.Telephone_4) 
) 

========以2 =======

繼評論:

與電話號碼第二客戶ID

創建新表
CREATE TABLE tempTelephoneNos (
    INTEGER customer, 
    VARCHAR(32) telephoneNo 
); 

假設這些是客戶ID和電話號碼的適當數據類型。

填充新表

INSERT INTO tempTelephoneNos (customer, telephoneNo) 
SELECT customer_id, telephone_1 
FROM customers 
UNION ALL 
SELECT customer_id, telephone_2 
FROM customers 
UNION ALL 
SELECT customer_id, telephone_3 
FROM customers 
UNION ALL 
SELECT customer_id, telephone_4 
FROM customers 

然後你就可以找出哪些電話號碼出現一個以上的客戶提供

SELECT customer, telephoneNo 
FROM tempTelephoneNos 
WHERE 1 < (SELECT COUNT(*) FROM tempTelephoneNos GROUP BY telephoneNo) 
+0

真棒 - 看起來像我需要什麼!但是,有沒有辦法可以排除重複?作爲空白電話_1將空白t_2/t_3/t_4? – thisisJR

+0

另外,看到重複在一起會很棒! I.E.如果三個記錄使用相同的數字,它會顯示他們彼此相鄰? – thisisJR

+0

添加空白驗證如下: 「... WHERE(a.Telephone_1」>「和a.Telephone_1 IN(b.Telephone_1,b.Telephone_2,b.Telephone_3,b.Telephone_4))...」 – thisisJR