집 >데이터 베이스 >MySQL 튜토리얼 >배열 필드를 사용하여 PostgreSQL 테이블을 조인할 때 배열 요소 순서를 유지하는 방법은 무엇입니까?
문제:
항목 테이블에서 데이터를 검색하여 순서를 유지합니다. 특정에 대한 some_chosen_data_in_order 테이블의 배열 유형 필드에 있는 요소 수 row.
시도 #1: JOIN
SELECT I.* FROM items AS I JOIN some_chosen_data_in_order AS S ON I.id = ANY(S.id_items) WHERE S.id = ?
시도 #2: 하위 쿼리
SELECT I.* FROM items AS I WHERE I.id = ANY (ARRAY[SELECT S.id_items FROM some_chosen_data_in_order WHERE id = ?])
이러한 접근 방식 중 어느 것도 요소의 순서를 유지하지 않습니다. array.
해결책:
SELECT t.* FROM unnest(ARRAY[1,2,3,2,3,5]) item_id LEFT JOIN items t on t.id=item_id
이 쿼리는 요소 순서를 유지하면서 배열을 개별 행으로 중첩 해제합니다. 그런 다음 id 필드를 기반으로 결과 항목을 항목 테이블과 조인합니다.
예:
ID | items_data |
---|---|
1 | {2,4,233,5} |
위 쿼리는 다음을 반환합니다. 결과:
id | data |
---|---|
2 | foo |
4 | bar |
233 | baz |
5 | qux |
설명:
unnest 함수는 요소당 한 행이 있는 테이블로 배열을 압축 해제합니다. LEFT JOIN은 항목 테이블에 해당 행이 없는 항목을 포함하여 배열의 모든 항목이 반환되도록 합니다.
위 내용은 배열 필드를 사용하여 PostgreSQL 테이블을 조인할 때 배열 요소 순서를 유지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!