2013-05-21 53 views
3

我正在使用大約30,000條記錄的MySQL數據庫,並試圖想出一個篩選出某些類型的重複記錄的查詢。SQL - 篩選出某些類型的重複項

有兩個相關的列 - emailflag。我需要獲取所有沒有重複的記錄email。對於有重複email的記錄,只有對於所有這些重複記錄,我纔會排除它們,flag設置爲'no'。如果對於其中一行,flag是'是',那麼我需要返回所有這些記錄。

到目前爲止,我有這個:http://sqlfiddle.com/#!2/ac20d/6 它目前返回行3,4,5,6,7,11,12。我需要它返回3,4,5,6,7,8,9,11,12。

任何幫助將不勝感激!

謝謝!

+1

將返回電子郵件中的任何時候至少有一個記錄具有標誌=「是」? –

回答

1

我不明白你爲什麼不在結果中返回10。它遵循你的規則,但它是一個空字符串。所以,我想出了這個:

select * from mytable where email IN (
select 
email 
from 
mytable t 
group by email 
having count(email) = 1 or EXISTS (SELECT 1 FROM mytable st 
              WHERE t.email = st.email 
              AND st.flag = 'yes') 
) 
AND email != '' 

這是你所需要的?

sqlfiddle link

+0

我不想爲OP發言,但如果要做的是使用電子郵件地址,那麼排除空字符串的電子郵件地址可能是有意義的。 –

+0

這就是爲什麼我在末尾添加'和email!=''':) – fancyPants

+0

我知道。我回應了你的陳述,*「我不明白你爲什麼不在結果中返回10。」* –