Подпишитесь здесь. Новость может принадлежать многим категориям или вообще не имеет категории. Мне нужно запросить все новости, которые не относятся к определенной категории (т. Е. 2) (Если новости относятся к категориям 2 и 3, мы все равно этого не хотим).Можно ли улучшить этот SQL-запрос?
Кажется, я решил это таким образом, но я не очень разбираюсь в SQL, поэтому буду очень благодарен за любые идеи и критику. Извините, может быть, тривиальный и неинтересный вопрос.
SELECT * FROM news n
LEFT JOIN news_cats nc ON n.id = nc.cat_id
WHERE n.id NOT IN (SELECT news_id FROM news_cats WHERE news_cats.cat_id = 2)
GROUP BY n.id;
Какой РСУБД это? Добавьте тег, чтобы указать, используете ли вы 'mysql',' postgresql', 'sql-server',' oracle' или 'db2' - или что-то еще. –
Кажется мне прекрасно; это, как я, скорее всего, сделал бы это – HoneyBadger
Замените все там WHERE с подзапросом с 'И news_cats.cat_id! = 2' – Mihai