Başka bir tabloya işaret eden bir jsonb sütunundaki ORDER BY deyimini kullanarak Postgres tablosundan kayıtlar nasıl seçilir

0

Soru

İki masam var., characteristics ve students.

özellikler

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

öğrenciler

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

Bu characteristics tablonun üç sütunu vardır: id sütun otomatik artış alanıdır. Bu name belirli bir özelliğin adını ve value karakteristikle ilgili ilgili bilgileri gösterir.

Bu students tablo her öğrenci hakkında ayrıntılı bilgi içerir. Bu character_value alan içinde students tablo bir jsonb alan. Jsonb dizisindeki her öğe, dizideki uygun karakteristik kimliğe işaret eden bir kimliktir. characteristics masa.

(örneğin, bir öğrenci Hindistan ülkesindeyse, kimlik 5 eklenir character_values ilgili öğrencinin adına karşı jsonb dizisi)

Her öğrencinin yalnızca bir ülkeye ait olabileceğini varsayarsak, sonucu ait oldukları ülkenin adına göre sıralarken öğrenci listesini nasıl seçerim?

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

En iyi cevabı

1

Aşağıdaki tablolarla katılabilirsiniz 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)

Çıktı:

kimlik isim değer isim
1 ülke İngiltere Jason
1 ülke İngiltere İşaret
3 oyun futbol İşaret
3 oyun futbol Kunal
4 oyun beyzbol Jason
5 ülke Hindistan Kunal
2021-11-21 19:12:50

Neden SELECT *yerine SELECT 1 kullandınız? Herhangi bir özel nedeni var mı?
Vinay

@ Vinay select 1 kongre için mi exists alt sorgular.
Ajax1234

Diğer dillerde

Bu sayfa diğer dillerde

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