powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как выполнить еще один запрос если первый пустой?
9 сообщений из 9, страница 1 из 1
Как выполнить еще один запрос если первый пустой?
    #39461508
acidophilus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день,

есть запрос, в нем несколько полей.

надо чтобы, если запрос не возвращает ничего - выплолнился другой запрос.




Подскажите как это сделать?
...
Рейтинг: 0 / 0
Как выполнить еще один запрос если первый пустой?
    #39461509
acidophilus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Думал можно так:

Код: sql
1.
SELECT COALESCE( (запрос1), (запрос2));




Но так не работает:



Код: sql
1.
2.
3.
ERROR: subquery must return only one column
SQL-состояние: 42601
Символ: 21
...
Рейтинг: 0 / 0
Как выполнить еще один запрос если первый пустой?
    #39461513
acidophilus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так тоже не работает, если ::record добавить:

acidophilusДумал можно так:

Код: sql
1.
SELECT COALESCE( (запрос1):RECORD, (запрос2));




Но так не работает:



Код: sql
1.
2.
3.
ERROR: subquery must return only one column
SQL-состояние: 42601
Символ: 21
...
Рейтинг: 0 / 0
Как выполнить еще один запрос если первый пустой?
    #39461554
ursido
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
acidophilus,

Смысл возвращаемой ошибки немного другой: подзапрос возвращает несколько записей, о чем честно пишет.
Нужно составить запрос, который возвращает не больше одной записи. Быстро и грязно (но неправильно): вписать LIMIT 1 в конце.
...
Рейтинг: 0 / 0
Как выполнить еще один запрос если первый пустой?
    #39461558
ursido
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ursido,

Ой! Должен возвращать одну колонку. Пробуйте так:

Код: sql
1.
SELECT t1 FROM pg_stat_activity t1
...
Рейтинг: 0 / 0
Как выполнить еще один запрос если первый пустой?
    #39461627
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
acidophilusДобрый день,

есть запрос, в нем несколько полей.

надо чтобы, если запрос не возвращает ничего - выплолнился другой запрос.




Подскажите как это сделать?
типы возвратов одинаковые ?

если нет -- придется привести тип к одному (текст например), и парсить уже клиентом.

если да -- то сам запрос как угодно -- через union (надо помыслить, как не делать 2, а не обрезать лимитом), coalesce (rec1,rec2),coalesce (txt1,txt2) ,coalesce (txt1[],txt2[]); [hstore[]|json] или ещё как-то.

давайте сначала определимся с типами.
...
Рейтинг: 0 / 0
Как выполнить еще один запрос если первый пустой?
    #39461644
acidophilus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwwqacidophilusДобрый день,

есть запрос, в нем несколько полей.

надо чтобы, если запрос не возвращает ничего - выплолнился другой запрос.




Подскажите как это сделать?
типы возвратов одинаковые ?

если нет -- придется привести тип к одному (текст например), и парсить уже клиентом.

если да -- то сам запрос как угодно -- через union (надо помыслить, как не делать 2, а не обрезать лимитом), coalesce (rec1,rec2),coalesce (txt1,txt2) ,coalesce (txt1[],txt2[]); [hstore[]|json] или ещё как-то.

давайте сначала определимся с типами.

типы одинаковые, но запросы разные, как их объединить - не пойму, коалис ведь в рамках одного запроса.
...
Рейтинг: 0 / 0
Как выполнить еще один запрос если первый пустой?
    #39461692
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
acidophilus
типы одинаковые, но запросы разные, как их объединить - не пойму, коалис ведь в рамках одного запроса.а сколько записей вам может вернуть каждый запрос ?

если не больше 1-го, это одно, если по несколько -- это другое (обходится возвратом array-ев типов или hstore, например).

примерное направление мысли :
Код: sql
1.
2.
with a(i,t) AS (values (0,'txt0'),(1,'txt1'),(2,'txt2'))
SELECT coalesce((SELECT array_agg(a) FROM a where NULL),(SELECT array_agg(a) FROM a where true)  )



или даже:
Код: sql
1.
2.
with a(i,t) AS (values (0,'txt0'),(1,'txt1'),(2,'txt2'))
SELECT u.* FROM unnest( coalesce((SELECT array_agg(a) FROM a where NULL),(SELECT array_agg(a) FROM a where true)  ) ) u (i int,t text)



это про coalesce. но, думаю, про union проще

Код: sql
1.
2.
3.
4.
5.
6.
with a(i,t) AS (values (0,'txt0'),(1,'txt1'),(2,'txt2'))

,t as (SELECT a.* FROM a where NULL)
SELECT * FROM t
union all
SELECT a.* FROM a where (select count(1) FROM t) =0
...
Рейтинг: 0 / 0
Как выполнить еще один запрос если первый пустой?
    #39466036
acidophilus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwwq,

спасибо!
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как выполнить еще один запрос если первый пустой?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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