1

我有一个表(客户),其中包括字段 phone_1、telephone_2、telephone_3 和 phone_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

任何帮助表示赞赏 - 谢谢!

4

1 回答 1

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)
于 2013-06-12T10:44:18.110 回答