| From: | Victor Yegorov <vyegorov(at)gmail(dot)com> |
|---|---|
| To: | vlads-yandex <vlads(at)ngs(dot)ru> |
| Cc: | "pgsql-ru-general(at)postgresql(dot)org" <pgsql-ru-general(at)postgresql(dot)org> |
| Subject: | Re: Условие селекте |
| Date: | 2023-04-16 20:23:42 |
| Message-ID: | CAGnEbog6zKs9p1j8HbL-iMMkpx+Qx3nP2_dbwHH5kQHOx+AcsQ@mail.gmail.com |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-ru-general |
вс, 16 апр. 2023 г. в 18:26, vlads-yandex <vlads(at)ngs(dot)ru>:
> Здравствуйте!
> Как сделать запрос в posgresql вида
> Select x FROM *
> Где * была разная таблица исходя из ввдоных условий
> SELECT x FROM CASE WHEN a=2 THEN table1 ELSE table2 END
> не работает.
>
SQL — декларативный язык, сущности должны быть определены на этапе
синтаксического разбора запроса.
Синтаксиса подобного вашему нет.
Решается динамическим построением запроса (PL/pgSQL или любой другой PL)
или же формированием запроса на стороне клиента,
т.е. условия вычисляете в приложении.
Однако, можно сформировать SQL-запрос в виде строки (тип text), получить
его клиентом и отправить обратно базе на исполнение.
В частности, родной клиент psql имеет псевдо-команду \gexec, которая (1)
исполняет запрос (2) получает ответ от базы и (3) отсылает ответ обратно в
виде нового запроса.
--
Victor Yegorov
| From | Date | Subject | |
|---|---|---|---|
| Next Message | André Kutepow | 2023-07-10 12:17:51 | pg_create_logical_replication_slot, output-plugin |
| Previous Message | vlads-yandex | 2023-04-16 15:26:18 | Условие селекте |