@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
  • Вопрос задан
  • 41 просмотр
Решения вопроса 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, можно получить тот же результат, что и в запросе из текста вопроса. При правильном индексировании он будет, скорее всего, даже более эффективен.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы