Postgresql Sélectionner une colonne ou d'autres sous le même alias en fonction de la valeur d'une troisième colonne

0

La question

J'ai une base de données dont le schéma peut être simplifiée de la façon suivante: un produit de la table, et de deux tables contenant des valeurs d'enrichir la description de produit. Je voudrais faire une requête SELECT me permettant d'afficher l'id de produit, suivi par une colonne contenant une valeur. Cette valeur peut être sélectionnée dans le attribute_value_1 table, si le produit est de type 'Type 1' ou dans le attribute_value_2 table, si le produit est de type 'Type2'.

Table produit

product_id type
1 type1
2 type2

Tableau attribute_value_1

id product_id valeur
1 1 XXXXX

Tableau attribute_value_2

id product_id valeur
1 2 ZZZZZ

Ainsi dans l'exemple suivant, le résultat de la requête doit être :

Résultat

product_id valeur
1 XXXXX
2 ZZZZZ

Savez-vous comment je peux procéder?

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

La meilleure réponse

1

vous pouvez utiliser deux gauche rejoint avec chaque attribut de la table, puis à l'aide de fusionner en fonction de (), de récupérer la valeur de ceux de la table thatmatched:

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

Dans d'autres langues

Cette page est dans d'autres langues

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................