Jak vybrat záznamy z Postgres tabulky pomocí příkazu prohlášení na jsonb sloupec, který odkazuje k jinému stolu

0

Otázka

Mám dvě tabulky, characteristics a students.

vlastnosti

 id      name          value
----    ------        -------
 1      country       england
 2      country       brazil
 3      games         football
 4      games         baseball
 5      country       india
 .        .             .
 .        .             .

studenti

 first_name      age       character_values
------------    -----     ------------------
  Jason          12         [1,4]
  Mark           14         [1,3] 
  Kunal          10         [5,3] 
   .              .           .
   .              .           .
   .              .           .

Na characteristics tabulka má tři sloupce, kde id sloupec je auto-přírůstek pole. Na name označuje jméno konkrétní charakteristika a value uvádí příslušné informace o charakteristické.

Na students tabulka obsahuje zprávu o každého studenta. Na character_value pole v students tabulka je jsonb pole. Každý prvek v jsonb pole je IDENTIFIKÁTOR, který odkazuje na příslušnou vlastnost ID v characteristics tabulka.

(například, pokud student je ze země indie pak ID 5 je připojen k character_values jsonb pole proti příslušné jméno studenta)

Za předpokladu, že každý student může patřit pouze do jedné země, jak vybrat seznam studentů, při objednání výsledek o název země patří?

database jsonb postgresql sql
2021-11-21 18:58:49
1

Nejlepší odpověď

1

Můžete se připojit tabulky s jsonb_array_elements:

select c.*, s.first_name from characteristics c join students s on exists 
  (select 1 from jsonb_array_elements(s.character_values) v where v.value::int = c.id)

Výstup:

id jméno hodnota first_name
1 země anglie Jason
1 země anglie Mark
3 hry fotbal Mark
3 hry fotbal Kunal
4 hry baseball Jason
5 země indie Kunal
2021-11-21 19:12:50

Proč jste použil VYBERTE 1 VYBERTE místo *? Nějaký konkrétní důvod?
Vinay

@Vinay select 1 je úmluva o exists poddotazy.
Ajax1234

V jiných jazycích

Tato stránka je v jiných jazycích

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