Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / "in select" и "exists" / 4 сообщений из 4, страница 1 из 1
19.06.2012, 11:15
    #37843863
faustgreen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"in select" и "exists"
В чем отличие конструкции "in" и "exists" в sql-запросе? Елси я правильно понял, то следующие два запроса должны выдать один и тот же результат. Если так, то зачем нужен "exist" и использует ли его кто нибудь ?

select table1.* from table1 where table1.id in (select table2.id from table2) into table table3

select table1.* from table1 where exists (select table2.* from table2 where table1.id=table2.id) into table table3
...
Рейтинг: 0 / 0
19.06.2012, 12:32
    #37844078
Ffffffffffffffff
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"in select" и "exists"
...
Рейтинг: 0 / 0
19.06.2012, 12:50
    #37844104
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"in select" и "exists"
Лучше всего разницу демонстрирует пример из Help'а (незаслуженно забытого) FPD2.6 для Select-SQL :
Формат: [NOT] EXISTS (<подзапрос>)
Пример: EXISTS ;
(SELECT * FROM invoice WHERE customer.zip = invoice.zip)

Проверка на существование по крайней мере одного ряда , удовлетворяющему условию подзапроса. Посредством EXISTS условие фильтрации оценивается как "истина", если только результат подзапроса не является пустым множеством.

Формат: <поле> [NOT] IN <набор_значений>
Пример: customer.zip NOT IN ('43411','43506','43667')

Посредством IN задается условие, что <поле> должно быть частью заданного набора значений, чтобы соответствующая ему запись попала в результат работы запроса.

Формат: <поле> [NOT] IN (<подзапрос>)
Пример: customer.cust_id IN ;
(SELECT tranfile.cust_id FROM tranfile WHERE
tranfile.item='FoxPro')

В данном случае <поле> должно быть частью набора значений, возвращенных подзапросом, чтобы соответствующая ему запись попала в результат работы запроса.
...
Рейтинг: 0 / 0
19.06.2012, 12:58
    #37844122
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"in select" и "exists"
По идее, EXISTS нужен, когда вы сравниваете несколько полей одновременно (например, целую запись с отобранной таблицей); IN же нужен для сравнения одного значения с отобранным множеством значений...
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / "in select" и "exists" / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]