Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разность двух множеств 
V
    Опции темы
WolfON
Дата 7.10.2007, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 604
Регистрация: 19.7.2004

Репутация: нет
Всего: 8



Есть таблица вида:

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

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

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

Каким образом это можно сделать?
PM MAIL ICQ   Вверх
SelenIT
Дата 7.10.2007, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 9
Всего: 401



Как-то так?
Код

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



--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
WolfON
Дата 7.10.2007, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 604
Регистрация: 19.7.2004

Репутация: нет
Всего: 8



Спасибо! Именно так smile

А я все сидел сочинял решение с под-запросами. Оно по-идее должно быть быстрее (размеры таблиц могут быть большими), но так и не сочинил
PM MAIL ICQ   Вверх
SelenIT
Дата 7.10.2007, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 9
Всего: 401



Цитата(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-ы...


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0448 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.