Выборка записей

disaster

Новичок
Выборка записей

Доброго всем времени суток!
Столкнулся со следующей проблемой: есть 3 таблицы А, В, А_В (3-я таблица для связи двух других и в ней находятся id-ры таблиц A и В), т.е.

|таблица А| | таблица А_В | |таблица В |
|________ | |___________| |_________|
|_______id|<-|_ext_a_id __| |_________|
|________ | |__ext_b_id _ |->| id_______|
|________ | |___________| |_________|
Нужно выбрать из таблицы B все строки, НЕсвязанные со ЗАДАННОЙ ($a_id) строкой из А, то бишь
PHP:
"SELECT B.field1,B.field2,B.field3 
FROM A_B, B 
WHERE A_B.ext_a_id <> ".$a_id." AND B.id = A_B.ext_b_id ";
Из В выберутся строки ИМЕЮЩИЕ СВЯЗЬ со строками из А за исключением строк имеющих связь со строкой с id=$a_id,
но в таблице В могут быть строки НЕСВЯЗАННЫЕ ни с кем из таблицы А ! Вопрос как их выбрать? Можно ли объединить этот запрос с предыдущим?
 

disaster

Новичок
т.е. {множество_всех_строк_В} минус {множество_строк_связанных_с_$a_id}
 

disaster

Новичок
т.е. получается так:
"
SELECT B.*
FROM A_B, B
WHERE A_B.ext_a_id <> ".$a_id." AND B.id = A_B.ext_b_id
UNION
SELECT B. *
FROM B
LEFT JOIN A_B ON B.id = A_B.ext_b_id
WHERE A_B.ext_b_id IS NULL
";

???
 

bgm

&nbsp;
Вложенный подзапрос:

SELECT id FROM `B` B WHERE NOT B.id IN (SELECT ext_b_id FROM `A_B`)
 

disaster

Новичок
Во родил!!! :)
PHP:
"SELECT id
FROM av4_factor
WHERE id NOT 
IN (SELECT DISTINCT ext_factor_id FROM av4_cat_factor)
UNION 
SELECT id
FROM av4_factor
WHERE id NOT 
IN (SELECT DISTINCT ext_factor_id FROM av4_cat_factor WHERE ext_cat_id =".$cat_id;
ВСЕМ БОЛЬШОЕ СПАСИБО!!!
 

vovik

Новичок
Union приплел просто потому что слово новое увидел в форуме ? :)
Объединяешь два множества, одно из которых уже содержится в другом.

В два раза короче с тем же результатом:

PHP:
"SELECT id
FROM av4_factor
WHERE id NOT 
IN (SELECT DISTINCT ext_factor_id FROM av4_cat_factor WHERE ext_cat_id =".$cat_id;
 

disaster

Новичок
Автор оригинала: vovik
Union приплел просто потому что слово новое увидел в форуме ? :)
Объединяешь два множества, одно из которых уже содержится в другом.

В два раза короче с тем же результатом:

PHP:
"SELECT id
FROM av4_factor
WHERE id NOT 
IN (SELECT DISTINCT ext_factor_id FROM av4_cat_factor WHERE ext_cat_id =".$cat_id;
ой точно, спасибо!

ТЕМУ можно закрывать
 
Сверху