我目前有一个客户表,其中包含重复的客户。我想选择一个独特的客户列表,没有重复的家庭电话或手机。
因此,如果任何客户拥有与其他客户相同的家庭电话或手机,那么我希望不会从查询中返回该客户。
一个警告 - 如果家庭电话或手机是空的,那么我显然不想在反复制逻辑中计算它,因为有些客户只有家用电话,或者只有手机。
这是我当前的查询,它返回家庭电话和手机的唯一行。
SELECT id, firstname, lastname, homephone, cellphone, city, state, zip,
country, FROM customers WHERE (homephone != "" OR cellphone != "")
GROUP BY homephone, cellphone
有什么想法吗?感谢。
答案 0 :(得分:2)
您必须将所有电话号码汇入 one 评估并按此排序/分组。
试试这个:
SELECT id, firstname, lastname, homephone, cellphone, city, state, zip, country
FROM customers
WHERE homephone != '' OR cellphone != ''
GROUP BY case when homephone = '' then cellphone else homephone end
它将获得为“家庭电话的每个唯一值找到的第一行,但如果是空白然后手机”
答案 1 :(得分:1)
如果两个客户拥有相同的非空家庭电话或相同的非空手机,则此查询将丢弃具有较大id
的那个:
SELECT id, firstname, ...
FROM customers c1
WHERE (c1.homephone != '' OR c1.cellphone != '')
AND ( c1.homephone = ''
OR NOT EXISTS
( SELECT 1
FROM customers c2
WHERE c2.id < c1.id
AND c2.homephone = c1.homephone
)
)
AND ( c1.cellphone = ''
OR NOT EXISTS
( SELECT 1
FROM customers c3
WHERE c3.id < c1.id
AND c3.cellphone = c1.cellphone
)
)
;
请注意,如果客户X与客户Y具有相同的主页电话,但与客户Z具有相同的单元电话,则可能会产生病态结果。