powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите составить запрос.
6 сообщений из 6, страница 1 из 1
Помогите составить запрос.
    #34767419
postman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Помогите пожалуйста составить запрос. Выполняю
Код: plaintext
select * from firm where time < now()
А если этот запрос ничего не возвращает надо чтоб выполнился запрос
Код: plaintext
select * from firm
Можно это как то объеденить в один запрос?
...
Рейтинг: 0 / 0
Помогите составить запрос.
    #34767483
Фотография pamir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
select * from firm where "time"<now() or not exists (select  1  from firm where "time"<now())
...
Рейтинг: 0 / 0
Помогите составить запрос.
    #34767516
postman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ого! :) работает! А можете объяснить что значит вторая часть записи (после or not exists)?
...
Рейтинг: 0 / 0
Помогите составить запрос.
    #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
Помогите составить запрос.
    #34767589
Фотография pamir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поправка к последнему абзацу -
(т.е. если таких нет, то для ЛЮБОЙ записи в таблице конструкция exists возвратит false , но у нас not exists, и эта конструкция уже будет true )
...
Рейтинг: 0 / 0
Помогите составить запрос.
    #34767601
postman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо Вам большое!!! :)
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите составить запрос.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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