我目前有一个customers表,其中有重复的客户。我想选择一个唯一的客户列表,没有重复的家庭电话或手机。
因此,如果任何客户拥有与另一个客户相同的家庭电话或移动电话,那么我希望不从查询中返回该客户。
一个警告--如果家用电话或手机是空的,那么我显然不想在防重复的逻辑中计算它,因为一些客户只有一部家用电话,或者只有一部手机。
下面是我的当前查询,它返回唯一的家用电话和移动电话行。
SELECT id, firstname, lastname, homephone, cellphone, city, state, zip,
country, FROM customers WHERE (homephone != "" OR cellphone != "")
GROUP BY homephone, cellphone有什么想法吗?谢谢。
发布于 2012-01-25 08:01:03
您必须将所有电话号码集中到一个评估中,并按此对其进行排序/分组。
试试这个:
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它将获得每个唯一值"homephone,但如果为空则cellphone“的第一行。
发布于 2012-01-25 04:59:29
如果两个客户具有相同的非空家庭电话或相同的非空手机,则此查询将丢弃具有较大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具有相同的手机,则这可能会给出病理结果。
https://stackoverflow.com/questions/8993647
复制相似问题