ogregor
@ogregor
арендатор vpn сервера debian

Mysql запрос с where not exists возвращает пустой результат?

Здравствуйте, есть проблема:

Существует 2 таблицы:
1) Таблица с атомарными данными --> id, httpstatus
2) Таблица с множеством записей id, httpstatus, и.т.д.
f7c72021507a4d828f0bcf44ae78231c.png

По отдельности запросы работают:
1) mysql> select scsq_httpstatus.name from squid.scsq_httpstatus
-> \g
+----------+
| name |
+----------+
| TCP_MISS |
+----------+
2) mysql> select distinct scsq_temptraffic.httpstatus from squid.scsq_temptraffic
-> \g
+-------------+
| httpstatus |
+-------------+
| TCP_MISS |
| TCP_IMS_HIT |
| TCP_HIT |
+-------------+
А вот с применением if not exists
3) mysql> select distinct scsq_temptraffic.httpstatus from squid.scsq_temptraffic where not exists(select scsq_httpstatus.name from squid.scsq_httpstatu)
-> \g
Empty set (0.00 sec)

Прошу помощи сообщества.
  • Вопрос задан
  • 2430 просмотров
Решения вопроса 1
ogregor
@ogregor Автор вопроса
арендатор vpn сервера debian
stackoverflow.com/questions/915643/select-where-no...

Надо было сопоставить поля:
scsq_temptraffic.httpstatus from squid.scsq_temptraffic where not exists (select scsq_httpstatus.name from squid.scsq_httpstatus where scsq_httpstatus.name = scsq_temptraffic.httpstatus )
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Как работает EXISTS.
Если вложенный в EXISTS запрос возвращает хотя бы одну строку, даже из NULL, то EXISTS возвращает TRUE, список выбираемых полей при этом игнорируется. Таким образом, ваш запрос вернёт что-либо только если таблица squid.scsq_httpstatus пуста.
Возможно Вам нужна функция IN (NOT IN) или JOIN таблиц.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы