你可以自己加入电话或电子邮件表中。
然后GROUP BY并使用MIN显示最低的ID。
例子:
select t.Phone, t.Email, t.ID, min(t2.ID) as NewID
from YourTable t
left join YourTable t2 on (t2.Email = t.Email or t2.Phone = t.Phone)
group by t.ID, t.Phone, t.Email
结果举例:
Phone Email ID NewID
----- ------ -- -----
916 [email protected] 1 1
NULL [email protected] 2 1
916 NULL 3 1
915 NULL 4 4
NULL [email protected] 5 5
但要拿到预期的结果?
哪里有电话的链接有优先权,即使它是NULL?
你可以使用一个额外的自联接:
例子:
select t.Phone, t.Email, t.ID, coalesce(min(t3.ID), min(t2.ID)) as NewID
from YourTable t
left join YourTable t2 on (t2.Email = t.Email or t2.Phone = t.Phone)
left join YourTable t3 on (t3.Email = t2.Email or (t.Email is null and t3.Email is not null and t3.Phone is null))
group by t.ID, t.Phone, t.Email
结果举例:
Phone Email ID NewID
----- ------- -- -----
916 [email protected] 1 1
NULL [email protected] 2 1
916 NULL 3 1
915 NULL 4 2
917 [email protected] 5 1
917 [email protected] 6 1
这里指定的预期结果作为表,格式化文本了。 – jarlh
请给您的DBMS添加标签,每个可能有不同的解决方案 – JohnHC
是否会有一个既有电话又有电子邮件的记录?是否有perhpas额外的列将具有相同的值可用于一个组的记录?像f.e.客户名称? – LukStorms