SQL - 在两个表之间查询基本

时间:2012-04-10 12:59:34

标签: sql

我想知道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。

proc sql;    标题'电子邮件除了垃圾邮件'    从sql.EMAIL中选择*    除了    select * from sql.SPAM;

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

                               EMAIL EXCEPT SPAM

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

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

你能帮我查询一下:

SELECT * 来自电子邮件 在哪里...... ????

感谢的

3 个答案:

答案 0 :(得分:2)

SELECT * FROM EMAIL WHERE y NOT IN (SELECT z FROM SPAM)

答案 1 :(得分:2)

在垃圾邮件中使用Null的左外连接可以正常工作。

SELECT E.*
FROm EMAIL E
LEFT JOIN SPAM S
  ON E.Email = S.Email
WHERE S.Id IS NULL

答案 2 :(得分:0)

  

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

mySQL不支持

EXCEPT。请注意,如果没有明确的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 );