Jak wybrać rekordy z tabeli Postgresql za pomocą instrukcji ORDER BY w kolumnie jsonb, który wskazuje na inną tabelę

0

Pytanie

Mam dwa biurka, characteristics i students.

dane techniczne

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

Dla studentów

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

To characteristics tabela składa się z trzech kolumn, w których id kolumna-to pole automatycznego przyrostu. To name oznacza nazwę konkretnej cechy i value określa odpowiednie informacje na temat charakterystyki.

To students tabela zawiera szczegółowe informacje o każdym studencie. To character_value w polu students tabela przedstawia jsonb pole. Każdy element w tablicy jsonb ma identyfikator wskazujący na odpowiedni identyfikator techniczne w characteristics stół.

(na przykład, jeśli uczeń z kraju Indie, identyfikator 5 dodaje się do character_values tablica jsonb przeciwko imieniu danego ucznia)

Zakładając, że każdy uczeń może należeć tylko do jednego kraju, jak mi wybrać z listy studentów, упорядочивая wynik na nazwę kraju, do którego one należą?

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

Najlepsza odpowiedź

1

Możesz dołączyć do tabel z 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)

Wyjście:

ID Nazwa wartość nazwa użytkownika
1 Kraj Anglia Jason
1 Kraj Anglia Mark
3 Gry Piłka nożna Mark
3 Gry Piłka nożna Kunal
4 Gry baseball Jason
5 Kraj Indie Kunal
2021-11-21 19:12:50

Dlaczego użyłeś SELECT 1 zamiast SELECT *? Z jakiegoś konkretnego powodu?
Vinay

@Vinay select 1 czy konwencja dla exists podzapytania.
Ajax1234

W innych językach

Ta strona jest w innych językach

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