Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите составить запрос. / 6 сообщений из 6, страница 1 из 1
31.08.2007, 12:27
    #34767419
postman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос.
Помогите пожалуйста составить запрос. Выполняю
Код: plaintext
select * from firm where time < now()
А если этот запрос ничего не возвращает надо чтоб выполнился запрос
Код: plaintext
select * from firm
Можно это как то объеденить в один запрос?
...
Рейтинг: 0 / 0
31.08.2007, 12:41
    #34767483
pamir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос.
Код: plaintext
select * from firm where "time"<now() or not exists (select  1  from firm where "time"<now())
...
Рейтинг: 0 / 0
31.08.2007, 12:46
    #34767516
postman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос.
Ого! :) работает! А можете объяснить что значит вторая часть записи (после or not exists)?
...
Рейтинг: 0 / 0
31.08.2007, 12:59
    #34767576
pamir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос.
postmanОго! :) работает! А можете объяснить что значит вторая часть записи (после or not exists)?Легко.
Конструкция exists (not exists) проверят условие существования чего-либо для текущей записи. Т.е. если нужно не просто сравнить поле со значением, а проверить - существует ли в другой таблице хотя бы одна запись соответствующая проверяемой записи из выбираемой таблицы по каким-то своим критериям).
Например, выбрать всех поставщиков, у которых были поставки (т.е. хотя бы одна запись) в апреле.
Пусть поставщики - (гыг, как это по английски?) таблица sellers., а список поставок - sale_list.
Можно написать запрос
Код: plaintext
select * from sellers as s where exists (select  1  from sale_list as sl where s.id = sl.seller_id and sl.month= 4 )
Работает это следующим образом - при переборе записей sellers проверяется - существует ли хотя бы одна запись в таблице sale_list с условиями, что эта запись для проверяемого продавца и относится к четвертому месяцу. (реально сервер может работать и иначе, т.е. не делать "перебор" записей и сравнение каждой с условием существования, но для понимания легче представить именно так).
Конечно, это задачу можно было решить и иначе
Код: plaintext
select s.* from sellers as s, sale_list as sl where s.id = sl.seller_id and sl.month= 4 
Но фактически здесь объединение таблиц не требуется, т.к. из sl нам никаких данных не нужно.

В нашей же задаче условие для exists не привязывается к конкретной записи.
Получается, что запись выводится, либо если она меньше now(), либо если таких записей в таблице вообще не существует (т.е. если таких нет, то для ЛЮБОЙ записи в таблице конструкция exists возвратит true, если же есть - она для всех вернет false и будет работать условие перед OR)
...
Рейтинг: 0 / 0
31.08.2007, 13:01
    #34767589
pamir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос.
поправка к последнему абзацу -
(т.е. если таких нет, то для ЛЮБОЙ записи в таблице конструкция exists возвратит false , но у нас not exists, и эта конструкция уже будет true )
...
Рейтинг: 0 / 0
31.08.2007, 13:04
    #34767601
postman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос.
Спасибо Вам большое!!! :)
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите составить запрос. / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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