MySQL противоположность внутреннего соединения - PullRequest
23 голосов
/ 03 января 2011

Я хочу связаться с моими пользователями по электронной почте, используя мою базу данных.Я хочу убедиться, что я случайно не связался с одним и тем же пользователем дважды.Для этого у меня есть таблица, которая отслеживает, с кем и когда связывались.

Когда я делаю свой запрос MYSQL, я хочу выбрать электронные письма из таблицы email и убедиться, что ни одна из этих записей не существует в contacted таблица.

Чтобы сформулировать это в предложении: выберите адрес электронной почты из Email_Table, если их нет в Contacted_Table

Возможно, существует совершенно другой подход.Я открыт для всех предложений:) Спасибо:)

Ответы [ 3 ]

32 голосов
/ 03 января 2011

Попробуйте это

SELECT email FROM email_table e 
LEFT JOIN contacted_table c ON e.email = c.email
WHERE c.email IS NULL
26 голосов
/ 03 января 2011
select email 
from Email_Table t1 
where not exists (select email 
                  from Contacted_table t2 
                  where t1.email = t2.email)

ИЛИ

select email 
from Email_Table t1 
where email not in (select email 
                    from Contacted_table)
11 голосов
/ 03 января 2011

Если вы попытаетесь присоединиться слева, как это:

SELECT users.email, contacted.email
FROM users LEFT JOIN contacted ON users.email = contacted.email

Вы получите похожий результат:

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

Ваша цель - получить те записи, которые не совпадают в таблице contacted, поэтому ваш запрос будет:

SELECT users.email
FROM users LEFT JOIN contacted ON users.email = contacted.email
WHERE contacted.email IS NULL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...