@TerritoryOfPeace
Изучаю php

Как вычитать таблицу после JOIN?

Есть такой запрос к БД:
SELECT * FROM `table1` JOIN `table2` ON `title`=`sometitle` ORDER BY `date`

Нужно еще в этом запросе вычитать все записи из `table3` которые совпадают по `id` с `table1`. Как это сделать?
  • Вопрос задан
  • 137 просмотров
Решения вопроса 1
SELECT * 
FROM `table1` JOIN `table2` ON `title`=`sometitle` 
WHERE table1.id NOT IN (SELECT id FROM table3)
ORDER BY `date`
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Akina
Сетевой и системный админ, SQL-программист.
NOT IN в большинстве случаев - самая медленная реализация. Лучше использовать, в зависимости от объёма данных и наличия индексов, либо WHERE NOT EXISTS, либо LEFT JOIN WHERE IS NULL.

SELECT * 
FROM `table1` 
JOIN `table2` ON `title`=`sometitle` 
WHERE NOT EXISTS ( SELECT NULL
                   FROM table3
                   WHERE table1.id = table3.id )
ORDER BY `date`


SELECT * 
FROM `table1` 
JOIN `table2` ON `title`=`sometitle` 
LEFT JOIN table3 ON table1.id = table3.id
WHERE table3.id IS NULL
ORDER BY `date`


Что именно использовать - надо смотреть по построенному плану запроса и практическому сравнению производительности запросов.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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