Oracle数据库中提取共享同一邮箱的唯一partyID
Oracle提取共享同一邮箱的唯一PartyID
聚合式输出(每个邮箱对应所有关联PartyID)
如果希望每个邮箱一行,同时列出所有共享该邮箱的partyID,可以使用LISTAGG函数实现:
SELECT email, LISTAGG(partyID, ', ') WITHIN GROUP (ORDER BY partyID) AS party_ids FROM your_table_name WHERE email IN ( -- 筛选出存在多个不同PartyID的邮箱 SELECT email FROM your_table_name GROUP BY email HAVING COUNT(DISTINCT partyID) > 1 ) GROUP BY email ORDER BY email;
逐条式输出(每行一个邮箱+单个PartyID)
如果需要以每行一条记录的形式展示共享邮箱的partyID和邮箱地址,使用关联查询:
SELECT DISTINCT t.partyID, t.email FROM your_table_name t INNER JOIN ( SELECT email FROM your_table_name GROUP BY email HAVING COUNT(DISTINCT partyID) > 1 ) duplicate_emails ON t.email = duplicate_emails.email ORDER BY t.email, t.partyID;
注意事项
- 将语句中的
your_table_name替换为你实际使用的表名 LISTAGG函数适用于Oracle 11g及以上版本,若使用更低版本可改用WM_CONCAT(需注意兼容性)
内容的提问来源于stack exchange,提问作者Surya
相关产品推荐
相关产品推荐

