Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > Разность двух множеств


Автор: WolfON 7.10.2007, 17:31
Есть таблица вида:

id | tag_id
1 | 5
1 | 6
1 | 7
2 | 5
2 | 8
3 | 9
4 | 6

Нужно найти разность двух множеств. Те допустим выбрать все значения, которые есть в множестве с id = 1, но которых нету в других множествах (уникальные)

В таком примере это будет 7.

Каким образом это можно сделать?

Автор: SelenIT 7.10.2007, 17:38
Как-то так?
Код

SELECT t1.* FROM table t1
LEFT JOIN table t2 ON t1.tag_id = t2.tag_id AND t1.id != t2.id
WHERE t1.id = 1 AND t2.id IS NULL

Автор: WolfON 7.10.2007, 17:45
Спасибо! Именно так smile

А я все сидел сочинял решение с под-запросами. Оно по-идее должно быть быстрее (размеры таблиц могут быть большими), но так и не сочинил

Автор: SelenIT 7.10.2007, 17:59
Цитата(WolfON @  7.10.2007,  17:45 Найти цитируемый пост)
Оно по-идее должно быть быстрее

Хм... я всю жизнь считал, что наоборот, хотя по идее оптимизатор в любом случае должен приводить к оптимальному эквивалентному виду. Но можно и с подзапросом:
Код

SELECT * FROM table
WHERE id = 1 AND tag_id NOT IN (SELECT tag_id FROM table WHERE id != 1)

По скорости - нужно сравнивать explain-ы...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)