@vladislav997

Как правильно сделать запрос в бд?

Подскажите, как правильно сделать запрос в бд? Есть 3 таблицы:
chat, group, group_chat.

И есть запрос на то чтобы вытянуть все чаты которые принадлежат одной группе:
SELECT c.id, c.title, c.chat_id, c.is_active
FROM chat as c
LEFT JOIN group_chat as gc
ON gc.chat_id = c.id
WHERE gc.group_id = 9

Но как сделать обратный запрос? В смысле вытянуть как раз те чаты, которые не принадлежат данной группе?
Просто изменить последнюю строчку где равно на не равно не получается:
WHERE gc.group_id != 9
  • Вопрос задан
  • 42 просмотра
Решения вопроса 1
@Akina
Сетевой и системный админ, SQL-программист.
SELECT *
FROM chat
WHERE NOT EXISTS ( SELECT NULL
                   FROM group_chat 
                   WHERE chat.id = chat_id
                     AND group_id = 9 )

Кстати, заменив NOT EXISTS на EXISTS, можно получить тот же результат, что и в запросе из текста вопроса. При правильном индексировании он будет, скорее всего, даже более эффективен.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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