Что бы MYSQL искал для получения данных из 2 таблиц, если они не соответствуют таблице 3? - PullRequest
0 голосов
/ 07 января 2011

В последнее время я выполняю некоторую работу над своим классом MySql в php, и в результате оптимизации некоторых частей моего кода я хотел бы сузить некоторые функции обратного отсчета.Мне действительно тяжело работать с 3 или более столами, потому что это действительно сбивает с толку.У меня нет большого опыта работы с MySql или какой-либо другой базой данных, но я знаю основы и немного больше.

А по проблеме я не могу понять, как сделать заявление следующим образом:

[таблица1 - пользователи.email] И [таблица2 - подписчики.email] НЕ ВХОДИТ [таблица3 - check.email]

В словах, которые будут выглядеть как " Получите мне всех уникальных пользователейэлектронные письма от [table1] и [table2], которые не находятся в [table3] и помещают их в 1 список"

Под 1 списком я подразумеваю то же самое, что это утверждение делает

ВЫБЕРИТЕ u.email от пользователей КАК СОЮЗ ВЫБРАТЬ s.email ОТ подписчиков КАК s

Заранее спасибо, пожалуйста, скажите, если вам нужна дополнительная информация.

Ответы [ 4 ]

3 голосов
/ 07 января 2011

Вы оставили присоединение к 3-й таблице и затем выполните команду "where t3.field IS NULL"

пример:

SELECT u.email FROM users AS u 
LEFT JOIN table3 t3 ON u.email = t3.email
WHERE t3.email IS NULL
UNION 
SELECT s.email FROM subscribers AS s
LEFT JOIN table3 t3 ON s.email = t3.email
WHERE t3.email IS NULL

Вам также необходимо сделать это отдельно, чтобы получить уникальные результаты.

0 голосов
/ 07 января 2011

В зависимости от вашей БД, что-то вроде этого должно работать ...


select u1.email 
from users u1 
where u1.email not in (select table3.email from table3) 
union
select s1.email 
from subscribers s1 
where s1.email not in (select table3.email from table3) 

0 голосов
/ 07 января 2011

Как насчет этого:

SELECT Email From 
(
   Select Email From Table1
   UNION ALL 
   SELECT Email From Table2
) AS T
WHERE T.Email NOT IN (SELECT Email From Table3)

Производительность здесь НЕ так хороша, как решение JOIN.

0 голосов
/ 07 января 2011

Может быть, что-то вроде этого

  select *
   from users
   left join subscribers on users.email = subscribers.email
   left join check on check.email = users.email
   where table3.email = null

Обратите внимание, это отличается от некоторых других ответов - предполагается, что подписчики являются связанной таблицей. В формулировке вашего ответа (и других ответов) предполагается, что подписчики и пользователи взаимоисключающие.

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