단일 행에 대한 일대다 SQL SELECT
두 개의 테이블에 데이터가 있습니다.
첫 번째 테이블에는 PKID라는 기본 키가 있습니다.
PKID DATA
0 myData0
1 myData1
2 myData2
두 번째 테이블에는 테이블 1의 PKID 열이 외부 키로 있습니다.
PKID_FROM_TABLE_1 U_DATA
0 unique0
0 unique1
0 unique2
1 unique3
1 unique4
1 unique5
2 unique6
2 unique7
2 unique8
제가 지금 하고 있는 기본적인 SELECT 진술은
SELECT a.PKID, a.DATA, b.U_DATA
FROM table1 as a
INNER JOIN table2 as b
ON a.PKID = b.PKID_FROM_TABLE_1
이렇게 하면 다음과 같은 표가 생성됩니다.
PKID DATA U_DATA
0 myData0 unique0
0 myData0 unique1
0 myData0 unique2
1 myData1 unique3
1 myData1 unique4
1 myData1 unique5
2 myData2 unique6
2 myData2 unique7
2 myData2 unique8
제가 원하는 것은 다음 표입니다.
PKID DATA U_DATA1 U_DATA2 U_DATA3
0 myData0 unique0 unidque1 unique2
1 myData1 unique3 unidque4 unique5
2 myData2 unique6 unidque7 unique8
도움이 될 경우 각 PKID는 표 2에 정확히 3개의 항목을 가집니다.
MySQL에서 이와 같은 것이 가능합니까?
이것이 결과를 얻을 수 있는 한 가지 방법입니다.
이 접근 방식은 상관된 하위 쿼리를 사용합니다.각 하위 쿼리는 다음을 사용합니다.ORDER BY
테이블2에서 관련 행을 정렬하는 절이며, 사용합니다.LIMIT
첫 번째, 두 번째 및 세 번째 행을 검색하는 절입니다.
SELECT a.PKID
, a.DATA
, (SELECT b1.U_DATA FROM table2 b1
WHERE b1.PKID_FROM_TABLE_1 = a.PKID
ORDER BY b1.U_DATA LIMIT 0,1
) AS U_DATA1
, (SELECT b2.U_DATA FROM table2 b2
WHERE b2.PKID_FROM_TABLE_1 = a.PKID
ORDER BY b2.U_DATA LIMIT 1,1
) AS U_DATA2
, (SELECT b3.U_DATA FROM table2 b3
WHERE b3.PKID_FROM_TABLE_1 = a.PKID
ORDER BY b3.U_DATA LIMIT 2,1
) AS U_DATA3
FROM table1 a
ORDER BY a.PKID
따르다
@gliese581g는 외부 쿼리에서 반환된 각 행에 대해 SELECT 목록의 각 하위 쿼리가 실행되기 때문에 이 접근 방식에 성능 문제가 있을 수 있다고 지적합니다.
이러한 접근 방식에는 다음과 같은 지표가 필요합니다.
ON table2 (PKID_FROM_TABLE_1, U_DATA)
-아니면, 최소한-
ON table2 (PKID_FROM_TABLE_1)
외부 키가 정의된 경우 후자의 인덱스가 이미 존재할 수 있습니다.이전 인덱스를 사용하면 정렬 작업("파일 정렬 사용") 없이 인덱스 페이지("인덱스 사용")에서 쿼리를 완전히 충족할 수 있습니다.
@glies581g는 이 접근 방식의 성능이 "대규모" 세트에서 문제가 될 수 있다는 점을 지적하는 것이 매우 옳습니다.
MySQL의 릴리스에 따라 GROUP_CONCAT를 조사할 수 있습니다.
언급URL : https://stackoverflow.com/questions/11441305/one-to-many-sql-select-into-single-row
'programing' 카테고리의 다른 글
CALayer를 위한 애니메이션 종료 콜백? (0) | 2023.09.03 |
---|---|
jQTouch와 jQuery 모바일의 차이점 (0) | 2023.09.03 |
jQuery: 자식 제외 함수를 클릭합니다. (0) | 2023.09.03 |
href in jquery로 요소를 얻는 방법은 무엇입니까? (0) | 2023.09.03 |
Mysql 워크벤치에서 두 모델 간에 테이블을 복사하는 방법은 무엇입니까? (0) | 2023.09.03 |