[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите составить запрос
Razzwan
Есть новость и категория новости. Новость может принадлежать нескольким категориям, а может быть вообще без категорий. Все это в 3нф. Нужно выбрать все новости, которые не принадлежат категории с cat_id=5 (если новость принадлежит двум категориям, например, 2 и 5 - ее не выбираем). Одним SQL запросом.

Логику я понимаю, но чет до конца додумать не могу.

3н.ф. говорит о том, что у меня есть 3 таблицы: новости, категории, и таблица связи. Мне нужно выбрать все новости, которые в таблице связи не встречаются с cat_id=5

SELECT * 
FROM news
LEFT JOIN news_cats
ON news.id = news_cats.news_id
WHERE news_cats.cat_id<>5
UNION
SELECT
*
FROM news
LEFT JOIN news_cats
ON news.id = news_cats.news_id
WHERE news_cats.cat_id IS null


Во-первых, такой запрос выберет те новости, которые принадлежат двум категориям, одна из которых = 5, а во-вторых сам запрос кажется громоздким. Такое впечатление, что можно проще. DISTINCT не знаю, как можно здесь использовать и можно ли. (

Это задание в тесте, которое я не решил (

_____________
Youtube канал WebDeveloper->Run()
Сайт для души
Gitter
sergeiss
"На коленке" набросал так :) Скорее всего не самый оптимальный вариант, но должен работать.
Тут я предполагаю, что news - это таблица новостей, а news_cats - таблица связей между новостями и категориями.
select * 
from news
where news_id not in
(select distinct news_id
from news_cats
where cat_id = 5
)


_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
WebWizardry
select n.* from news2cats nc
left join news2cats nc2 on nc2.news_id = nc.news_id and nc2.cat_id = 5
left join news n on n.id = nc.news_id
where nc2.news_id is null
WebWizardry
да, еще group by n.id
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.