Select

僅選擇特定列具有不同/多個值的那些記錄

  • May 1, 2019

下面是我的會員表的一個例子。在電子郵件欄位中有一些具有多個值的記錄。我只想選擇具有多個電子郵件值的那些記錄:

成員表

ID   LASTNAME    FIRSTNAME    EMAIL
567  Jones       Carol        carolj@gmail.com
567  Jones       Carol        caroljones@aol.com
678  Black       Ted          tedblack@gmail.com
908  Roberts     Cole         coleroberts@gmail.com
908  Roberts     Cole         coler@aol.com
908  Roberts     Cole         colerobersc@hotmail.com

我希望結果是:

567  Jones       Carol        carolj@gmail.com
567  Jones       Carol        caroljones@aol.com
908  Roberts     Cole         coleroberts@gmail.com
908  Roberts     Cole         coler@aol.com
908  Roberts     Cole         colerobersc@hotmail.com

請注意,Ted Black 失去了,因為他只有一個電子郵件地址條目。

我應該澄清一下,我的會員表有超過 4 列。電話和地址等還有額外的列。一個成員可能有多個條目,因為他/她有多個電話號碼或地址。我只想擷取那些擁有多個電子郵件地址的人。

這是數據庫清理的一部分,將添加一個主鍵。我應該進一步澄清,有些人可能有多個具有相同電子郵件地址的條目。在這個階段,我不想擷取具有相同電子郵件地址的多個條目,但只有那些具有多個具有不同電子郵件地址的條目的條目。

您可以執行以下操作:

select distinct x.id, x.lastname, x.firstname, x.email
from t as x
join (
   select id
   from t
   group by id
   having count(distinct email) > 1
) as y
   on x.id = y.Id    
select x.* 
from member as x
where x.id IN

   (
   select id
   from member
   group by id
   having count(distinct email) > 1
   )

引用自:https://dba.stackexchange.com/questions/108114