Re: Условие селекте

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

In response to

Browse pgsql-ru-general by date

  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 Условие селекте