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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Двойной запрос 
V
    Опции темы
SmarTik
Дата 19.12.2008, 01:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Доброго времени суток.

Такой вопрос: 
Допустим есть таблица, в которой ИМЯ и ID. 
Нужно вытянуть из неё только те элементы, ID которых не присутствуют в результате другого запроса, к примеру такого: SELECT ID FROM MyDataBase WHERE UserTime > 5.
Я пробовал играться со вложенными запросами, но ничего не выходит ((( подскажите как решается такая задача. Я так понимаю она элементарна...
спасибо.
PM MAIL   Вверх
ТоляМБА
Дата 19.12.2008, 06:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Котэ
***


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

Репутация: 4
Всего: 252



Код
Select *
from table1
where id
NOT IN
(SELECT ID FROM MyDataBase WHERE UserTime > 5)



Код
Select id, Field1
from Table1 T1
Left join
(SELECT ID FROM MyDataBase WHERE UserTime > 5) as T2
on T1.id=T2.id
where T1.Field1 IS NULL


Второй запрос корректно сработает при условии что в Table1 в поле Field1 нет Null-значений (по дефолту Not Null).


Это сообщение отредактировал(а) ТоляМБА - 19.12.2008, 07:00
PM   Вверх
Zloxa
Дата 19.12.2008, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


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

Репутация: 53
Всего: 161



Цитата(ТоляМБА @  19.12.2008,  06:59 Найти цитируемый пост)
Второй запрос корректно сработает при условии что в Table1 в поле Field1 нет Null-значений (по дефолту Not Null).

Мимо. 
Если Field1 is not nullable, запрос будет возвращать все значения Table1, размноженные по количеству записей,возвращенных подзапросом. Если id уникален, а Field1 is not nullable, запрос выродится в эквивалент  Select id, Field1 from Table1 
Код

Select t1.*
from Table1 T1
Left join
(SELECT /*distinct*/ ID FROM MyDataBase WHERE UserTime > 5) as T2
on T1.id=T2.id
where T2.id IS NULL

Запрос работает, если MyDataBase.id not nullable. Если ID не уникален, необходимо раскоментировать distinct, и получить потери в производительности.

Третий вариант:
Код

select * from table1 t1
  where not exists (select null from SELECT ID FROM MyDataBase t2 WHERE UserTime > 5 and t2.id = t1.id)



--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
ТоляМБА
Дата 19.12.2008, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Котэ
***


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

Репутация: 4
Всего: 252



Zloxa, полность с тобой согласен!

Приношу извинения за то что не проверил запросы на практике.
PM   Вверх
SmarTik
Дата 19.12.2008, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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


 




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


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

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