![]() |
|
Модераторы: skyboy |
![]()
|
|
| gelo86 |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 388 Регистрация: 26.10.2007 Репутация: нет Всего: нет |
Допустим у меня есть две таблицы:
Есть такие записи:
Как мне вытенуть людей, каторие нечитали книжки с именем Name2 ? Left join мне вернет человека с id=1, так как он имеет есчо запись с книжкой под названием 'Name1'. |
||||
|
|||||
| ТоляМБА |
|
|||
![]() Котэ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1607 Регистрация: 15.12.2004 Репутация: 4 Всего: 252 |
Методом исключения:
Если не пойдет, то после закрывающей скобки допиши 'AS a'. |
|||
|
||||
| gelo86 |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 388 Регистрация: 26.10.2007 Репутация: нет Всего: нет |
1. У меня около 30000 людей, и если половина из них прочитали ету книжку, то получится что в not in будет около 15000 идишников (а как слишал not in при таких количествах неочень оптимальный).
2. Да и селект :
Это сообщение отредактировал(а) gelo86 - 28.9.2009, 19:34 |
||||
|
|||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 53 Всего: 161 |
-------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| Gluttton |
|
|||
![]() Начинающий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1170 Регистрация: 28.8.2008 Где: Феодосия Репутация: 24 Всего: 54 |
-------------------- Слава Україні! |
|||
|
||||
| gelo86 |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 388 Регистрация: 26.10.2007 Репутация: нет Всего: нет |
Та же проблема с not in. Я понемаю, что может и нету другого способа. А как ви относитесь к: not in(1..15000) ? |
||||
|
|||||
| Gluttton |
|
|||
![]() Начинающий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1170 Регистрация: 28.8.2008 Где: Феодосия Репутация: 24 Всего: 54 |
СУБД? Например счастливые пользователи Oracle могут воспользоваться предложением MINUS...
-------------------- Слава Україні! |
|||
|
||||
| gelo86 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 388 Регистрация: 26.10.2007 Репутация: нет Всего: нет |
Исползуется Oracle, но пишем на Java + Hibernate => HQL, поетому думаю MINUS в HQL непрокатит :(
|
|||
|
||||
| boevik |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1452 Регистрация: 31.5.2004 Где: Израиль Репутация: нет Всего: 35 |
Можно конечно совсем без not in,
-------------------- Никогда не говори никогда |
|||
|
||||
| gelo86 |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 388 Регистрация: 26.10.2007 Репутация: нет Всего: нет |
А СУБД внутренний селект будет виполнять толко один раз ? |
||||
|
|||||
| Gluttton |
|
|||
![]() Начинающий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1170 Регистрация: 28.8.2008 Где: Феодосия Репутация: 24 Всего: 54 |
Вот тут написано про про разность и некоторые варианты его реализации...
-------------------- Слава Україні! |
|||
|
||||
| boevik |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1452 Регистрация: 31.5.2004 Где: Израиль Репутация: нет Всего: 35 |
Да, так как не зависит от внешних параметров. -------------------- Никогда не говори никогда |
|||
|
||||
| Zloxa |
|
||||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 53 Всего: 161 |
boevik,
Тогда уж лучше
disitnct раскоментировать, если пара user_id,name не уникальна. ну и еще несколько вариаций
Веский аргумент. -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
||||
|
|||||
| gelo86 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 388 Регистрация: 26.10.2007 Репутация: нет Всего: нет |
||||
|
||||
| boevik |
|
||||||||||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1452 Регистрация: 31.5.2004 Где: Израиль Репутация: нет Всего: 35 |
Вполне возможно что и этот вариант пройдет. (не совсем помню как поведет себя name = 'book1' внутри on)
В этом случае на каждую запись в таблице user выполняется внутрений select, если есть индекс то может и не страшно, а если нет, то ...
минус не все СУБД поддерживают.
совсем не верный результат вернет. Добавлено через 8 минут и 13 секунд
показать только теx пользователей из t1 которые не присуствуют в t2 -------------------- Никогда не говори никогда |
||||||||||||||
|
|||||||||||||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 53 Всего: 161 |
Да, виноват. Спасибо.
Если нет индекса, то будет антиджойн по хэшу и это будет производительнее нежели левый джойн по хэшу но еще и с дистинктом. Если есть ограничение уникальности по паре (user_id,name), то дистинкт не нужен, но и индекс есть. Если мы используем индекс, то для левого джоина ли, для анти джоина ли, разницу сложно будет измерить существующими в настоящее время приборами. как бы в общем случае, этот вариант предпочтительнее левого джойна.(для оракла) Но далеко не факт что он предпочтительнее not in. Мне кажется весьма вероятным, что замена not in ни на left join ни на not exists ничего ТС не даст. ТС озвучил целевую платформу. Кстати, буде у ТС записей порядка на три-четыре поболе, я бы настаивал на том, чтобы он присмотрелся именно к этому варианту. boevik, Вообще я повторил ошибку, которую допускаю часто. Первую часть поста я обращал тебе. Остальную часть - ТС. Опять забыл поставить обращение, прошу прощения. Я не думал тебе оппонировать, просто убрал из твоего варианта лишние скобки, какбы подтверждая его правильность.. Это сообщение отредактировал(а) Zloxa - 28.9.2009, 21:57 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| DimW |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 4 Всего: 44 |
||||
|
||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 53 Всего: 161 |
Надо б разобраться с этой байдой.. хотябы в терминологии. Дабы впредь не вестись :( Это сообщение отредактировал(а) Zloxa - 29.9.2009, 08:37 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| DimW |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 4 Всего: 44 |
||||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Составление SQL-запросов | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |