我想知道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 * 来自电子邮件 在哪里...... ????
感谢的
答案 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)
mySQL不支持通常我使用EXCEPT,但它不适用于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 );