선택하는 방법에서 레코드레스는 테이블을 사용하여 순서로 문을 대화는 두서없는 열에 포인트를 다른 테이블

0

질문

나는 두 개의 테이블 characteristicsstudents.

적 특성

 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 다. 각 요소에 대화는 두서없이 배열은 ID 는 포인트는 적절한 특성 ID characteristics 테이블.

(예를 들어,만약 학생이 인도의 국가에서는 다음 ID5 가 추가됩 character_values 대화는 두서없이 배열에 대한 해당 학생의 이름)

가정은 각 학생의 수 있습 중 하나에 속하는 나라,어떻게 목록을 선택의 학생들이 주문하는 동안에 의한 결과를 국가의 이름을 그들에 속하는가?

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)

출력:

id 이름 first_name
1 국가 영국 Jason
1 국가 영국 마크
3 게임 축구 마크
3 게임 축구 쿠날
4 게임 야구 Jason
5 국가 인도 쿠날
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ý
..................................................................................................................