Создание динамических столбцов из данных таблицы - PullRequest
0 голосов
/ 24 апреля 2018

Пример данных таблицы:

--------------------------
| key | domain | value   |
--------------------------
| a   | en     | English |
| a   | de     | Germany |

Запрос, который возвращает результат, который мне нужен:

select * from 
(
    select t1.key,
        (select value from TABLE where t1.key=key AND code='en') en,
        (select value from TABLE where t1.key=key AND code='de') de
    from TABLE t1
) as t2

Данные, возвращаемые по запросу:

---------------------------
| key | en      | de      |
---------------------------
| a   | English | Germany |

Я не хочуперечислить все доступные домены с помощью:

(select value from TABLE where t1.key=key AND code='*') *

Можно ли сделать этот запрос более динамичным в Postgres: автоматически добавить все столбцы домена, которые существуют в таблице?

1 Ответ

0 голосов
/ 24 апреля 2018

Для нескольких доменов используйте crosstab(), чтобы сделать запрос короче и быстрее.

A полностью динамический запрос, возврат динамического числа столбцов на основе данных в вашей таблице невозможен, поскольку SQL строго типизирован. Что бы вы ни пытались, вам в конечном итоге понадобится два шага. Шаг 1: сгенерировать запрос, шаг 2: выполнить его.

Или вместо столбцов таблицы вы возвращаете что-то более гибкое, например массив или тип документа, например json. Подробности:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...