Ako vybrať záznamy z Postgres tabuľky pomocou PRÍKAZU ziskov a strát na jsonb stĺpec, ktorý poukazuje na inej tabuľke

0

Otázka

Mám dve tabuľky, characteristics a students.

vlastnosti

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

študenti

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

Na characteristics tabuľka má tri stĺpce, kde id stĺpec je auto-prírastok oblasti. Na name označuje názov konkrétneho charakteristika a value označuje príslušné informácie o charakteristické.

Na students tabuľka obsahuje podrobnosti o každého študenta. Na character_value v oblasti students tabuľka je jsonb pole. Každý prvok v jsonb pole je IDENTIFIKÁTOR, ktorý poukazuje na príslušné charakteristické ID v characteristics tabuľka.

(napríklad, ak študent z krajiny indie, ID 5 je pripojený k character_values jsonb pole proti príslušné meno študenta)

Za predpokladu, že každý študent môže patriť len do jednej krajiny, ako môžem vyberte zoznam študentov počas objednávania výsledok názov krajiny patria?

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

Najlepšiu odpoveď

1

Môžete sa pripojiť k tabuľky 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 názov hodnota first_name
1 krajina anglicko Jason
1 krajina anglicko Marek
3 hry futbal Marek
3 hry futbal Kunal
4 hry baseball Jason
5 krajina india Kunal
2021-11-21 19:12:50

Prečo ste použiť VYBERTE položku 1 VYBERTE miesto *? Akýkoľvek konkrétny dôvod?
Vinay

@Vinay select 1 je dohovoru pre exists subqueries.
Ajax1234

V iných jazykoch

Táto stránka je v iných jazykoch

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