выборка разности множеств

Nogrogomed

Новичок
выборка разности множеств

Вот столкнулся с такой проблемой, и как решить ее не знаю.
Возможно ли ее решение одним запросом?
Вот допустим есть таблица
id n1 n2
1 a @
2 a #
3 b @
4 c #


Нужно выбрать такие, чтобы для определенного n1 не нашлось n2 = @ (т.е. в базе был только n2 = #). В данной ситуации должен выбраться только id =4. Двумя запросами это можно сделать легко, но вот делает ли мускул это одним? В принципе-то ситуация не редкая.
 

bakh

Абалдуй
Что-то ты какую-то пургу гонишь...
Разве ты не можешь сделать [sql]select * from table where n2 = '#'[/sql]?..
 

Nogrogomed

Новичок
Читай внимательнее условия.
Твой запрос вернет

2 a #
4 c #

Для n1 = 'a' найдется запись у которой n2 = '@'. Т.е. меня это и не устраивает.
Уточню вопрос:
У меня первое множество A - множесво n1 у которых n2 = '#'
Второе: множество n1 у которых n2 = '@' (миножество Б).

Мне нужно найти разность А\Б
 

bakh

Абалдуй
Не знаю, как в Мускуле, но у нас канает так
[sql]
select t.* from table t where (t.n2 = '#') and (exists(select 1 from table u where (u.id = t.id) and (u.n2 = '@') ))
[/sql]
;)
 

Nogrogomed

Новичок
Спасибо за совет.
Читал, что вроде как в 5.0. есть такой оператор. Но в 4.1 и меньше - нету. У меня стоит 4.1. Перелопатил мануал по 4.1. и ничего не нашел
 

bakh

Абалдуй
Nogrogomed А чо мануалы-то лопатить?.. Взял да попробовал... ;)
 

Nogrogomed

Новичок
извиняюсь. Не те мануалы смотрел. Взял. попробовал. Получилось. Спасибо. :)
 
Сверху