mysql与内连接相对

sal*_*ane 24 mysql sql

我想使用我的数据库通过电子邮件联系我的用户.我想确保我不会意外地联系同一个用户两次.为此,我有一张表来跟踪联系人和何时联系.

当我执行我的MYSQL查询时,我想从email表中选择电子邮件,并确保表中不存在这些条目contacted.

要在一个句子中对其进行短语:如果Email_Table中的电子邮件不在Contacted_Table中,请选择该电子邮件

也许有一种完全不同的方法.我对所有建议持开放态度:)谢谢:)

Ger*_*umm 34

试试这个

SELECT email FROM email_table e 
LEFT JOIN contacted_table c ON e.email = c.email
WHERE c.email IS NULL
Run Code Online (Sandbox Code Playgroud)

  • +1.你也可以写'USING(email)`.使其更具可读性. (4认同)

Jah*_*ine 28

select email 
from Email_Table t1 
where not exists (select email 
                  from Contacted_table t2 
                  where t1.email = t2.email)
Run Code Online (Sandbox Code Playgroud)

要么

select email 
from Email_Table t1 
where email not in (select email 
                    from Contacted_table)
Run Code Online (Sandbox Code Playgroud)


Sil*_*ght 11

如果您尝试像这样执行左连接:

SELECT users.email, contacted.email
FROM users LEFT JOIN contacted ON users.email = contacted.email
Run Code Online (Sandbox Code Playgroud)

你会得到类似的结果:

users.email | contacted.email
-----------------------------
aa@aa.com   | aa@aa.com
bb@bb.com   | bb@bb.com
cc@cc.com   | cc@cc.com
dd@dd.com   | NULL
ee@ee.com   | NULL
Run Code Online (Sandbox Code Playgroud)

您的目标是获取contacted表中没有匹配项的记录,因此您的查询将是:

SELECT users.email
FROM users LEFT JOIN contacted ON users.email = contacted.email
WHERE contacted.email IS NULL
Run Code Online (Sandbox Code Playgroud)

  • NULL不等于NULL,使用`WHERE contacts.email IS NULL`代替 (4认同)