[SQL] PostgreSQL의 배열 요소 순서와 배열 형으로 가입, 어떻게 구현하는 방법?
SQLPostgreSQL의 배열 요소 순서와 배열 형으로 가입, 어떻게 구현하는 방법?
나는 데이터베이스에 두 개의 테이블이 있습니다
CREATE TABLE items(
id SERIAL PRIMARY KEY,
... some other fields
);
이 테이블은 고유의 ID와 데이터 행을 올 포함되어 있습니다.
CREATE TABLE some_chosen_data_in_order(
id SERIAL PRIMARY KEY,
id_items INTEGER[],
);
이 테이블은 배열 유형 필드가 포함되어 있습니다. 각 행은 특정 순서 테이블 항목에서 ID의 값을 포함합니다. 예를 들면 : {2,4,233,5}.
지금, 나는 배열 유형의 요소에 대한 주문 테이블 some_chosen_data_in_order에서 선택된 행에 대한 테이블 항목에서 데이터를 얻을 싶어요.
내 시도는 가입했다 :
SELECT I.* FROM items AS I
JOIN some_chosen_data_in_order AS S ON I.id = ANY(S.id_items) WHERE S.id = ?
두 번째 시도는 하위 쿼리 같았다 :
SELECT I.* FROM items AS I
WHERE I.id = ANY
(ARRAY[SELECT S.id_items FROM some_chosen_data_in_order WHERE id = ?])
그러나 그들 중 누구도 배열 필드에서와 같은 순서로 ID를 유지하지 않습니다. 당신이 날 어떻게 특정 행에 대한 some_chosen_data_in_order 테이블에서 배열 ID를 순서에 해당 된 항목 테이블에서 데이터를 얻을하는 데 도움이 수 있습니까?
해결법
-
==============================
1.
SELECT t.* FROM unnest(ARRAY[1,2,3,2,3,5]) item_id LEFT JOIN items t on t.id=item_id
위의 쿼리는 ID를 가진 항목 테이블에서 항목을 선택합니다 순서대로 1,2,3,2,3,5를.
-
==============================
2.아마 테이블을 정상화하는 것은 내가 당신을 줄 수있는 최고의 조언이 될 것입니다.
아마 테이블을 정상화하는 것은 내가 당신을 줄 수있는 최고의 조언이 될 것입니다.
int_array있는 contrib 모듈은 당신에게 배열의 INT의 인덱스 위치를 줄 것이다 IDX 기능이 있습니다. 코드 조각 배열의 모든 데이터 유형의 동안 그 일을 위키에 또한 IDX 기능이있다.
SELECT i.*, idx(id_items, i.id) AS idx FROM some_chosen_data_in_order s JOIN items i ON i.id = ANY(s.id_items) ORDER BY idx(id_items, i.id)
-
==============================
3.
select distinct on (some_chosen_data_in_order.id) some_chosen_data_in_order.*, array_to_json( array_agg(row_to_json( items)) over ( partition by some_chosen_data_in_order.id )) from some_chosen_data_in_order left join items on items.id = any (some_chosen_data_in_order.id_items)
-
==============================
4.
SELECT I.* FROM items AS I WHERE I.id IN (SELECT UNNEST(id_items) FROM some_chosen_data_in_order (ARRAY[SELECT S.id_items FROM some_chosen_data_in_order WHERE id = ?])
from https://stackoverflow.com/questions/2486725/postgresql-join-with-array-type-with-array-elements-order-how-to-implement by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] MySQL의 해제 및 키 사용 (0) | 2020.06.03 |
---|---|
[SQL] mysql을 / SQLSERVER에서 삭제 대 잘라야의 비교 [중복] (0) | 2020.06.03 |
[SQL] 어떻게 Golang를 사용하여 SQL에서 IN 조회를 실행하려면? (0) | 2020.06.03 |
[SQL] 이 파일의 데이터에 액세스하거나 데이터베이스 서버에 빠른가요? (0) | 2020.06.03 |
[SQL] 시간 부분을 무시 T-SQL에서 비교 날짜, (0) | 2020.06.02 |