1

我想知道MYSQL(编辑HeidiSQL)

我有 2 个表(电子邮件和垃圾邮件)2 行(ID、EMAIL)并且我想清理我的数据库:设置操作示例中使用的表

                                EMAIL

                                  x  y
                           ------------------
                                  1  one@edu.com     
                                  2  two@edu.com     
                                  2  two@edu.com      
                                  3  three@edu.com    

                                SPAM

                                  x  z
                           ------------------
                                  1  one@edu.com      
                                  2  two@edu.com      
                                  4  four@edu.com     

通常我使用 EXCEPT 但它不适用于 MYSQL。

过程 sql; 标题 'EMAIL EXCEPT SPAM' select * from sql.EMAIL except select * from sql.SPAM;

生成仅在第一个查询结果中的行(除外)

                               EMAIL EXCEPT SPAM

                                  x  y
                           ------------------
                                  3  three@edu.com    

我尝试使用 WHERE NOT EXISTS 但我不知道。

你能帮我查询一下吗:

从电子邮件中选择 * 在哪里 ... ????

谢谢

4

3 回答 3

2
SELECT * FROM EMAIL WHERE y NOT IN (SELECT z FROM SPAM)
于 2012-04-10T13:02:57.267 回答
2

垃圾邮件中带有 Null 的左外连接应该可以工作。

SELECT E.*
FROm EMAIL E
LEFT JOIN SPAM S
  ON E.Email = S.Email
WHERE S.Id IS NULL
于 2012-04-10T13:03:32.860 回答
0

通常我使用 EXCEPT 但它不适用于 MYSQL。

EXCEPT在 mySQL 中不支持。请注意,在没有显式ALL | DISTINCT关键字的情况下,EXCEPT默认为EXCEPT DISTINCT. 因此,在您的解决方法中,您应该明确使用SELECT DISTINCT(因为SELECT默认为SELECT ALL)。

我尝试使用 WHERE NOT EXISTS

SELECT DISTINCT y 
  FROM EMAIL 
 WHERE NOT EXISTS ( SELECT * 
                      FROM SPAM
                     WHERE y = z );
于 2012-04-10T14:45:44.320 回答