Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Логическое "и" при выборке из двух таблиц, пересечение 
:(
    Опции темы
Royan
  Дата 9.1.2008, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

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



Всех с прошедшими праздниками! Только вернулся из долгих праздничных выходных в суровые рабочие будни 2008-го, страсть как не хочется работать, но ... короче вопрос

Сижу я под Oracle, но не думаю что тут есть что-то специфическое. Есть две таблицы TUsers и TUsersOnline в одной вообще все юзеры в другой те которые находятся online. Я хочу одним запросом выводить всех юзеров которые в offline, т.е. тех которые есть в TUsers и нет в TLoggedUsers


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
DEER
Дата 9.1.2008, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 749
Регистрация: 12.4.2005
Где: г. Рязань

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



ну это вообще проста
Код

SELECT * FROM TUsers WHERE TUsers.id NOT IN (SELECT id FROM TUsersOnline)

типа, если эти две таблицы связаны по полю id


--------------------
 
PM MAIL WWW ICQ MSN   Вверх
ivashkanet
Дата 9.1.2008, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

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



так же можно иннер джоин двут таблиц сделать

Пошел за кодом... smile

Добавлено через 37 секунд
надо протестить что будет быстрее smile
PM MAIL WWW ICQ   Вверх
DEER
Дата 9.1.2008, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 749
Регистрация: 12.4.2005
Где: г. Рязань

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



В постгрисе WHERE ... IN быстрее отрабатывает при большом количестве записей.
проверял не раз уже.
а при маленьком, так там и разницы нет что 0.1 мс будет, что 0.13 smile


--------------------
 
PM MAIL WWW ICQ MSN   Вверх
Deniz
Дата 10.1.2008, 06:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 7
Всего: 44



Цитата(DEER @  9.1.2008,  21:56 Найти цитируемый пост)
В постгрисе WHERE ... IN быстрее отрабатывает при большом количестве записей.

В вопросе 
Цитата(Royan @  9.1.2008,  20:09 Найти цитируемый пост)
Сижу я под Oracle

Пример с join
Код

SELECT * 
FROM TUsers
  left join TUsersOnline on TUsers.id = TUsersOnline.id
WHERE TUsersOnline.id is null



--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
DimW
Дата 11.1.2008, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 2
Всего: 44



А про minus все забыли....

Код

select user_name from all_user
minus
select user_name from on_line_user

PM MAIL ICQ   Вверх
Deniz
Дата 11.1.2008, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 7
Всего: 44



DimW, кроме user_name может потребоваться вывод и других полей, а при разной структуре TUsersOnline и TUsers запрос сильно усложняется, да и использование индексов под вопросом.


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
DimW
Дата 11.1.2008, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 2
Всего: 44



Цитата(Deniz @  11.1.2008,  12:52 Найти цитируемый пост)
кроме user_name может потребоваться вывод и других полей

от автора уточнеий по этому поводу не было.

Цитата(Deniz @  10.1.2008,  06:22 Найти цитируемый пост)
left join TUsersOnline on TUsers.id = TUsersOnline.id

счего вы взяли что id в разных таблицах будут соответствовать одному и тому же юзеру, если они вобще есть.


PM MAIL ICQ   Вверх
Deniz
Дата 11.1.2008, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 7
Всего: 44



DimW, автор вообще скрылся из виду и молчит smile

Цитата(DimW @  11.1.2008,  16:11 Найти цитируемый пост)
счего вы взяли что id в разных таблицах будут соответствовать одному и тому же юзеру, если они вобще есть.
это продолжение вот этого поста.
Не нравится id напишите IDUser или еще как хотите.


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
DimW
Дата 11.1.2008, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 2
Всего: 44



Цитата(Deniz @  11.1.2008,  14:15 Найти цитируемый пост)
Не нравится id напишите IDUser или еще как хотите

не суть, я имел ввиду что нет гарантии что таблицы связаны какими либо ключами, точно так же нет гарантии что ему не понадобятся поля которых нет в таблице  TUsersOnline.

Цитата(Deniz @  11.1.2008,  12:52 Найти цитируемый пост)
использование индексов под вопросом

есть ситуации в которых фулл скан таблицы работает быстрее индыксов, поэтому это не аргумент, только план запроса и тесты могут показать что предпочтительней.

Цитата(Deniz @  11.1.2008,  14:15 Найти цитируемый пост)
Цитата(DimW @  11.1.2008,  16:11 )
счего вы взяли что id в разных таблицах будут соответствовать одному и тому же юзеру, если они вобще есть.

это продолжение вот этого поста.


Deniz, это не попытка ткнуть пальцем именно в вас. 
Давайте прекратим спор и дождемся автора и выясним что конкретно ему нужно...

PM MAIL ICQ   Вверх
cra6
Дата 8.2.2008, 01:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



EXCEPT используется для того, чтобы объединять результаты двух или более команд SELECT, при этом в результат включаются только строки, содержащиеся в первой команде SELECT и не содержащиеся во второй. Поля всех результирующих таблиц должны быть совместимыми. Если ALL не использовано, то дупликаты исключаются из объединения результатов. 

Пример:
Код

SELECT vnum, vname
FROM tverkauf
WHERE stadt='Berlin'
EXCEPT
SELECT knum, kname
FROM tkunden
WHERE stadt='Berlin'
ORDER BY 1; 

PM MAIL   Вверх
Deniz
Дата 8.2.2008, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 7
Всего: 44



cra6, судя по описанию EXCEPT очень смахивает вот на это
Цитата(DimW @  11.1.2008,  15:44 Найти цитируемый пост)
А про minus все забыли....
select user_name from all_user
minus
select user_name from on_line_user



--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Общие вопросы по базам данных"
LSD
Zloxa

Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:

  • вопросам по СУБД для которых нет отдельных подфорумов
  • вопросам которые затрагивают несколько разных СУБД (например проблема выбора)
  • инструменты для работы с СУБД
  • вопросы проектирования БД
  • теоретически вопросы о СУБД

Данный форум не предназначен для:

  • вопросов о поиске разлиных БД (если не понимаете чем БД отличается от СУБД то: а) вам не сюда; б) Google в помощь)
  • обсуждения проблем с доступом к СУБД из различных ЯП (для этого есть соответсвующие форумы по каждому ЯП)
  • обсуждения проблем с написание SQL запросов, для этого есть форум Составление SQL-запросов
  • просьб о написании курсовой, реферата и т.п., для этого есть Центр помощи или фриланс биржа
  • объявлений о найме специалистов, для этого есть раздел Объявления о найме специалистов

Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение. ;)


Полезные советы:

При написании сообщения постарайтесь дать теме максимально понятное название. В теме максимально подробно опишите проблему. Если применимо укажите: название базы данных и версии (MySQL 4.1, MS SQL Server 2000 и т.п.); используемых язык программирования; способа доступа (ADO, BDE и т.д.); сообщения об ошибках.

Для вставки кода используйте теги [code=sql] [/code].

Литературу по базам данных можно поискать здесь.

Действия модераторов можно обсудить здесь.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | СУБД, общие вопросы | Следующая тема »


 




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


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

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