SQL - 过滤掉某些类型的重复项

时间:2013-05-21 13:43:39

标签: php mysql sql

我正在使用大约30,000条记录的MySQL数据库,并试图找出一个过滤掉某些类型的重复记录的查询。

有两个相关列 - emailflag。我需要获取所有没有重复email的记录。对于具有重复email的记录,我仅在所有重复项中将flag设置为“否”时将其排除。如果,对于其中一行,flag为“是”,那么我需要返回所有这些记录。

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

任何帮助都应该受到赞赏!

谢谢!

1 个答案:

答案 0 :(得分: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