powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Выбор другого запроса, если он null
7 сообщений из 7, страница 1 из 1
Выбор другого запроса, если он null
    #39198794
timik0992
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте. Не получается решить такой вопрос:
Без процедурных расширений, можно ли сделать подобный запрос?

case
when select not exists (%query%)
then select true
else %query% --этот запрос возвращает 2 столбца со значениями
end;

Как бы сделать выбор, если запрос null, то вывести true, если там что-то есть, то вывести их
...
Рейтинг: 0 / 0
Выбор другого запроса, если он null
    #39198827
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
timik0992,

Если у вас встречаются null-значения, то так:
Код: sql
1.
2.
SELECT coalesce(nullable_column_of_boolean_type, true) FROM tab;
--Если у вас колонка не булевая (скажем numeric), то возврщать `true` совсем не в кассу.


Если надо гарантированно вернуть записи, даже если нет попадающих в условия, то либо через внешние связки, либо через UNION + ORDER BY + LIMIT что-то мутить.
Вроде ещё был какой-то красивый выверт для подобного, но я не помню :)
...
Рейтинг: 0 / 0
Выбор другого запроса, если он null
    #39199205
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
timik0992Здравствуйте. Не получается решить такой вопрос:
Без процедурных расширений, можно ли сделать подобный запрос?

case
when select not exists (%query%)
then select true
else %query% --этот запрос возвращает 2 столбца со значениями
end;

Как бы сделать выбор, если запрос null, то вывести true, если там что-то есть, то вывести их

Т.е. в зависимости от запроса количество колонок в ответе будет разное - если да то это невозможно (даже с pl/pgsql).

--
Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
Выбор другого запроса, если он null
    #39199698
timik0992
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Boguk,
Мой query возвращает bool, integer. Ну можно в условии then сделать:
select true, 1. Тогда так возможно будет?
...
Рейтинг: 0 / 0
Выбор другого запроса, если он null
    #39199786
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
timik0992,

Криво это конечно, и простительно может быть в том случае, когда приложение поменять нельзя, но есть возможность(хуки) подсунуть свой запрос.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
postgres=# select true as col1, 1 as col2 where not exists (
    select false as col1, t as col2 from generate_series (6,5) as t
    limit 1) 
union all 
select false as col1, t as col2 from generate_series(6,5) as t;
 col1 | col2 
------+------
 t    |    1
(1 row)

postgres=# select true as col1, 1 as col2 where not exists (
    select false as col1, t as col2 from generate_series (1,5) as t
    limit 1) 
union all 
select false as col1, t as col2 from generate_series(1,5) as t;
 col1 | col2 
------+------
 f    |    1
 f    |    2
 f    |    3
 f    |    4
 f    |    5
(5 rows)
...
Рейтинг: 0 / 0
Выбор другого запроса, если он null
    #39200217
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел Лузановtimik0992,

Криво это конечно, и простительно может быть в том случае, когда приложение поменять нельзя, но есть возможность(хуки) подсунуть свой запрос.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
postgres=# select true as col1, 1 as col2 where not exists (
    select false as col1, t as col2 from generate_series (6,5) as t
    limit 1) 
union all 
select false as col1, t as col2 from generate_series(6,5) as t;
 col1 | col2 
------+------
 t    |    1
(1 row)

postgres=# select true as col1, 1 as col2 where not exists (
    select false as col1, t as col2 from generate_series (1,5) as t
    limit 1) 
union all 
select false as col1, t as col2 from generate_series(1,5) as t;
 col1 | col2 
------+------
 f    |    1
 f    |    2
 f    |    3
 f    |    4
 f    |    5
(5 rows)



Я бы еще на самом деле WITH бы для запроса сделал вида:

Код: plsql
1.
2.
3.
4.
WITH _res AS (select false as col1, t as col2 from generate_series (6,5) as t)
select true as col1, 1 as col2 where not exists (select * FROM _res)
UNION ALL
SELECT * FROM _res;



Тогда и запрос не будет 2 раза выполнятся и вписывать его 2 раза не придется.

--
Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
Выбор другого запроса, если он null
    #39200512
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Boguk,

+1
Я "осилил" только limit 1 в первый запрос добавить
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Выбор другого запроса, если он null
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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