Postgresql Wybiera kolumnę lub inny pod tym samym pseudonimem, zgodnie z wartością trzeciej kolumny

0

Pytanie

Mam baza danych, schemat, który można uprościć w następujący sposób: tabela produktów i dwie tabele zawierające wartości w celu rozszerzenia opisu. Chciałbym wykonać zapytanie SELECT, który pozwala mi wyświetlić identyfikator produktu, po którym następuje kolumny zawierającej wartość. Wartość tę można wybrać w tabeli attribute_value_1, jeśli produkt ten utrzymany jest raczej "Type1", lub w tabeli attribute_value_2, jeśli produkt ten utrzymany jest raczej "Typ 2".

Tabel produkt

product_id Typ
1 typ 1
2 typ 2

Tabela attribute_value_1

ID product_id wartość
1 1 XXXXX

Tabela attribute_value_2

ID product_id wartość
1 2 ЗЗЗЗЗЗ

Dlatego w poniższym przykładzie wynik zapytania powinien być :

Wynik

product_id wartość
1 XXXXX
2 ЗЗЗЗЗЗ

Wiesz, jak mogę działać dalej?

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

Najlepsza odpowiedź

1

możesz korzystać z dwóch lewych połączenia z każdą tabelą atrybutów , a następnie, za pomocą funkcji coalesce (), uzyskać wartości z tej tabeli, która odpowiada:

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

W innych językach

Ta strona jest w innych językach

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