powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / UNION + JOIN как то можно объединить ?
9 сообщений из 9, страница 1 из 1
UNION + JOIN как то можно объединить ?
    #38921949
anstrem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть простой запрос отбирающий все уникальные e-mail из двух таблиц:

SELECT DISTINCT va_orders.email FROM va_orders UNION DISTINCT SELECT DISTINCT va_orders.delivery_email FROM va_orders

А теперь нужно из результата выкинуть все e-mail, которые уже есть в третьей таблице

Чего то никак не вкурю как это сделать :(
Или это в одной команде никак ? А как тогда объединить ?
...
Рейтинг: 0 / 0
UNION + JOIN как то можно объединить ?
    #38921957
anstrem,

во-первых, DISTINCT не нужен, ибо UNION без ALL уже делает финальный DISTINCT по результату объединения.
Во-вторых, срези SET-операторов есть не только UNION [ALL], но и INTERSECT и MINUS (EXCEPT).
А если MINUS-а и нету, то можно через LEFT JOIN его эмулировать. Единственное, что запрос с UNION нужно оформить в виде деривед-тэйбл (вложенный подзапрос / inlinr view / select-from-select, х.з. как оно тебе понятнее будет)
...
Рейтинг: 0 / 0
UNION + JOIN как то можно объединить ?
    #38921958
anstrem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
anstrem из двух таблиц:

ОписАлся, тут из разных полей одной таблицы, но вообщем сути вопроса не меняет
...
Рейтинг: 0 / 0
UNION + JOIN как то можно объединить ?
    #38921959
Добрый Э - Эхanstrem,

во-первых, DISTINCT не нужен, ибо UNION без ALL уже делает финальный DISTINCT по результату объединения.
Во-вторых, сре д и SET-операторов есть не только UNION [ALL], но и INTERSECT и MINUS (EXCEPT).
А если MINUS-а и нету, то можно через LEFT JOIN его эмулировать. Единственное, что запрос с UNION нужно оформить в виде деривед-тэйбл (вложенный подзапрос / inlin e view / select-from-select, х.з. как оно тебе понятнее будет)
...
Рейтинг: 0 / 0
UNION + JOIN как то можно объединить ?
    #38921970
anstrem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый Э - Эхanstrem,

среди SET-операторов есть не только UNION [ALL], но и INTERSECT и MINUS (EXCEPT)

А это точно про MySQL ?
...
Рейтинг: 0 / 0
UNION + JOIN как то можно объединить ?
    #38921974
anstrem,

по теме минуса читать тут: тынц1 , тынц2 .


на худой конец можно заюзать {NOT IN | NOT EXISTS} подзапрос
...
Рейтинг: 0 / 0
UNION + JOIN как то можно объединить ?
    #38921975
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если используете UNION, то DISTINCT уже не нужен. UNION его и так сделает.


anstremА теперь нужно из результата выкинуть все e-mail, которые уже есть в третьей таблицеДва варианта - Либо соединять результат двух проверок таблиц, либо проверять результат соединения. Как будет быстрее - сходу не скажу, зависит от данных. Вероятно, первый вариант будет быстрее.
Код: sql
1.
2.
3.
SELECT table1.email FROM table1 LEFT JOIN table3 ON table1.email=table3.email WHERE table3.email IS NULL
UNION
SELECT table2.delivery_email FROM table2 LEFT JOIN table3 ON table2.email=table3.email WHERE table3.email IS NULL

Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT t.email
FROM
  (SELECT table1 .email FROM table1
   UNION
   SELECT table2.delivery_email FROM table2) t
LEFT JOIN table3 ON t.email=table3.email
WHERE table3.email IS NULL
...
Рейтинг: 0 / 0
UNION + JOIN как то можно объединить ?
    #38921976
anstrem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый Э - Эх Единственное, что запрос с UNION нужно оформить в виде деривед-тэйбл (вложенный подзапрос / inlinr view / select-from-select, х.з. как оно тебе понятнее будет)

Вот это видимо мне и не понятно :)
Как сделать с двумя таблицами через JOIN вроде знаю, а как тоже самое сделать с результатом UNION и таблицей ?
...
Рейтинг: 0 / 0
UNION + JOIN как то можно объединить ?
    #38921982
anstrem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft
Код: sql
1.
2.
3.
SELECT table1.email FROM table1 LEFT JOIN table3 ON table1.email=table3.email WHERE table3.email IS NULL
UNION
SELECT table2.delivery_email FROM table2 LEFT JOIN table3 ON table2.email=table3.email WHERE table3.email IS NULL



Спасибо, понял, сразу что то не догадался.
Скорость вообще тут не волнует, это разовые ручные запросы на выборку и таблицы не гигантские.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / UNION + JOIN как то можно объединить ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]