выбрать данные из двух независимых таблиц - PullRequest
1 голос
/ 26 февраля 2012

В моей базе данных MySQL есть две таблицы (MAILS и клиенты), в каждой из которых есть столбец email, в котором хранятся адреса электронной почты.

Теперь я бы хотел выбрать каждую строку из этих двух таблиц, где emails.email!=customers.email.

Когда я делаю простой SELECT * FROM emails, customers WHERE emails.email != customers.email, я получаю каждый emails.email, перечисленный с данными из таблицы клиентов.

Как мне это сделать? Могу ли я использовать DISTINCT, но применять его только к данным, поступающим из таблицы клиентов?

Ответы [ 2 ]

2 голосов
/ 26 февраля 2012

Если вам нужен уникальный список адресов электронной почты, найденный либо в таблице электронных писем, либо в таблице клиентов, где между ними нет совпадений в поле электронной почты, это поможет:

SELECT DISTINCT COALESCE(e.Email, c.Email) as Email
FROM Emails e FULL OUTER JOIN Customers c ON e.Email = c.Email
WHERE e.Email IS NULL OR c.Email IS NULL

По совпадению, этот тип обстоятельств является одной из очень немногих ситуаций, в которых я когда-либо находил, что ПОЛНОЕ НАРУЖНОЕ СОЕДИНЕНИЕ имеет особое значение ...

2 голосов
/ 26 февраля 2012

Соединение «не равно» очень редко полезно, если на самом деле нет другого столбца, который можно объединить для равенства. Итак, если у вас есть столбец PersonID в каждой из двух таблиц, то вы можете сделать:

SELECT m.*, c.*
  FROM mails AS m
  JOIN customers AS c ON c.PersonID = m.PersonID
 WHERE c.email != m.email

Но без этого дополнительного условия у вас есть то, что близко к декартовому произведению двух таблиц, где почти каждая строка в одной таблице соответствует почти каждой строке в другой (из-за условия не равно). Без условия «не равно» набор результатов будет лишь немного больше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...