我正在使用大约30,000条记录的MySQL数据库,并试图找出一个过滤掉某些类型的重复记录的查询。
有两个相关列 - email
和flag
。我需要获取所有没有重复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。
任何帮助都应该受到赞赏!
谢谢!
答案 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 强>