3

我正在使用大约 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。

任何帮助将不胜感激!

谢谢!

4

1 回答 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 链接

于 2013-05-21T14:08:57.870 回答