Postgresql Selezionare una colonna o di un altro, sotto lo stesso alias in base al valore di una terza colonna

0

Domanda

Ho un database il cui schema può essere semplificato in questo modo: un prodotto tavolo, e due tabelle contenenti i valori di arricchire la descrizione di un prodotto. Vorrei fare una query di selezione che mi permette di visualizzare l'id del prodotto, seguita da una colonna contenente un valore. Questo valore può essere selezionato in attribute_value_1 tabella se il prodotto è di tipo "Tipo1" o in attribute_value_2 tabella se il prodotto è di tipo "Tipo2".

Prodotto da tavola

product_id tipo
1 type1
2 tipo2

Tabella attribute_value_1

id product_id valore
1 1 XXXXX

Tabella attribute_value_2

id product_id valore
1 2 ZZZZZ

Così, nel seguente esempio, il risultato della query dovrebbe essere :

Risultato

product_id valore
1 XXXXX
2 ZZZZZ

Sapete come posso procedere?

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

Migliore risposta

1

è possibile utilizzare due left join con ogni attributo della tabella e quindi utilizzando la funzione coalesce() la funzione , il valore da quelli della tabella 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

In altre lingue

Questa pagina è in altre lingue

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