Postgresql Выбирает столбец или другой под тем же псевдонимом в соответствии со значением третьего столбца

0

Вопрос

У меня есть база данных, схему которой можно упростить следующим образом: таблица продуктов и две таблицы, содержащие значения для расширения описания продукта. Я хотел бы сделать запрос SELECT, позволяющий мне отобразить идентификатор продукта, за которым следует столбец, содержащий значение. Это значение можно выбрать в таблице attribute_value_1, если продукт относится к типу "Тип1", или в таблице attribute_value_2, если продукт относится к типу "Тип 2".

Табличный продукт

product_id Тип
1 тип1
2 тип 2

Таблица attribute_value_1

ID product_id ценность
1 1 XXXXX

Таблица attribute_value_2

ID product_id ценность
1 2 ЗЗЗЗЗЗ

Поэтому в следующем примере результат запроса должен быть :

Результат

product_id ценность
1 XXXXX
2 ЗЗЗЗЗЗ

Вы знаете, как я могу действовать дальше?

case postgresql select sql
2021-11-15 15:24:30
1

Лучший ответ

1

вы можете использовать два левых соединения с каждой таблицей атрибутов , а затем, используя функцию coalesce (), получить значение из той таблицы, которая соответствует:

select P.product_id , coalesce(att1.value, att2.value) value
from product p 
left join attribute_value_1 att1
   on p.product_id = att1.product_id and p.type = 'type1'
left join attribute_value_1 att2
   on p.product_id = att2.product_id and p.type = 'type2'
2021-11-15 15:40:21

На других языках

Эта страница на других языках

Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................