कैसे चयन करने के लिए रिकॉर्ड से एक Postgres तालिका का उपयोग कर एक आदेश के द्वारा बयान पर एक jsonb स्तंभ है कि अंक एक और करने के लिए टेबल

0

सवाल

मैं दो टेबल, characteristics और students.

विशेषताओं

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

छात्रों

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

के characteristics तालिका में तीन स्तंभ जहां id स्तंभ एक ऑटो वेतन वृद्धि क्षेत्र. के name अर्थ नाम की एक विशिष्ट विशेषता और value इंगित करता है संबंधित के बारे में जानकारी की विशेषता.

के students टेबल में शामिल है के बारे में विस्तार से प्रत्येक छात्र. के character_value क्षेत्र में students टेबल एक jsonb क्षेत्र है. प्रत्येक तत्व में jsonb सरणी है एक आईडी है कि अंक के लिए उपयुक्त विशेषता आईडी में characteristics तालिका.

(उदाहरण के लिए, यदि एक छात्र के देश से भारत फिर आईडी 5 है संलग्न करने के लिए character_values jsonb सरणी के खिलाफ संबंधित छात्र का नाम)

यह मानते हुए कि प्रत्येक छात्र ही कर सकते हैं एक देश के लिए, कैसे क्या मैं का चयन करें की एक सूची है, जबकि छात्रों का आदेश देने के परिणाम के नाम से देश वे हैं करने के लिए?

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

सबसे अच्छा जवाब

1

आप कर सकते हैं में शामिल होने के साथ टेबल 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)

आउटपुट:

आईडी नाम मूल्य first_name
1 देश इंग्लैंड जेसन
1 देश इंग्लैंड मार्क
3 खेल फुटबॉल मार्क
3 खेल फुटबॉल Kunal
4 खेल बेसबॉल जेसन
5 देश भारत Kunal
2021-11-21 19:12:50

क्यों आप एक का उपयोग करें का चयन करें 1 के बजाय का चयन करें *? किसी भी विशेष कारण है?
Vinay

@विनय select 1 है के लिए सम्मेलन exists की जाने वाली सबक्वेरी.
Ajax1234

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

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

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में