Postgresql Selectați o coloană sau alte sub același nume în funcție de valoarea de o a treia coloană

0

Problema

Am o baza de date a cărui schemă pot fi simplificate în acest fel: un produs de masă, și două tabele care conțin valorile pentru a îmbogăți o descriere a unui produs. Aș dori să fac o interogare de SELECTARE care permite-mi pentru a afișa id-ul produsului, urmată de o coloană conține o valoare. Această valoare poate fi selectat în attribute_value_1 masă, dacă produsul este de tip 'Type1' sau în attribute_value_2 masă, dacă produsul este de tip 'Type2'.

Produs de masă

product_id tip
1 type1
2 type2

Tabelul attribute_value_1

id product_id valoarea
1 1 XXXXX

Tabelul attribute_value_2

id product_id valoarea
1 2 ZZZZZ

Deci, în exemplul următor, rezultatul interogării trebuie să fie :

Rezultatul

product_id valoarea
1 XXXXX
2 ZZZZZ

Știi cum pot proceda?

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

Cel mai bun răspuns

1

puteți utiliza două din stânga se alătură cu fiecare atribut masă și apoi folosind coaguleze (funcția), obține valoarea de la cei masă 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

În alte limbi

Această pagină este în alte limbi

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