하나의 행을 다른 테이블의 여러 행에 결합
개체(사용자라고 함) 및 속성(한 사람이 임의의 개수의 속성을 가질 수 있음)에 대한 테이블이 있습니다.예:
사람
Name Age
--------
Jane 27
Joe 36
Jim 16
특성.
Name Property
-----------------
Jane Smart
Jane Funny
Jane Good-looking
Joe Smart
Joe Workaholic
Jim Funny
Jim Young
저는 나이에 따라 사람들을 선택하고 그들의 재산을 전부 혹은 일부 돌려주는 효율적인 선택을 쓰고 싶습니다.
Ex: People older than 26
Name Properties
Jane Smart, Funny, Good-looking
Joe Smart, Workaholic
또한 속성과 총 속성 개수 중 하나를 반환할 수 있습니다.
쿼리는 효율적이어야 합니다. 사용자 테이블에는 수백만 개의 행이 있고 속성 테이블에는 수십만 개의 행이 있습니다(따라서 대부분의 사용자는 속성이 없습니다).한 번에 수백 개의 행이 선택됩니다.
방법이 없을까요?
용도:
SELECT x.name,
GROUP_CONCAT(y.property SEPARATOR ', ')
FROM PEOPLE x
LEFT JOIN PROPERTIES y ON y.name = x.name
WHERE x.age > 26
GROUP BY x.name
Properties.property 값의 쉼표로 구분된 목록을 반환하기 위해 MySQL 함수 GROUP_CONCAT(문서)를 사용하려고 합니다.
속성 테이블에 값이 없는 피플 레코드를 포함시키기 위해 조인이 아닌 왼쪽 조인을 사용했습니다. - 속성 테이블에 값이 있는 피플의 목록만 원하는 경우 다음을 사용합니다.
SELECT x.name,
GROUP_CONCAT(y.property SEPARATOR ', ')
FROM PEOPLE x
JOIN PROPERTIES y ON y.name = x.name
WHERE x.age > 26
GROUP BY x.name
이것이 하나의 예라는 것을 알지만, 이름을 사용하는 것은 얼마나 많은 "John Smith"가 있는지를 고려할 때 참조하기에 적합하지 않은 선택입니다.사용자마다 고유한 값인 user_id를 할당하는 것이 더 나은 선택이 될 것입니다.
SELECT x.name,(select GROUP_CONCAT(y.Properties SEPARATOR ', ')
FROM PROPERTIES y
WHERE y.name.=x.name ) as Properties FROM mst_People x
이거 먹어봐요.
사용가능INNER JOIN두 테이블을 연결합니다.JOIN에 대한 자세한 내용.
SELECT *
FROM People P
INNER JOIN Properties Pr
ON Pr.Name = P.Name
WHERE P.Name = 'Joe' -- or a specific age, etc
그러나 이러한 테이블에 고유한 기본 키를 추가하고 인덱스를 생성하여 속도를 높이는 것이 훨씬 빠른 경우가 많습니다.
테이블을 말해요People밭이 있습니다id
그리고 테이블은Properties밭이 있습니다peopleId그것들을 서로 연결시키다
그러면 쿼리는 다음과 같이 나타납니다.
SELECT *
FROM People P
INNER JOIN Properties Pr
ON Pr.id = P.peopleId
WHERE P.Name = 'Joe'언급URL : https://stackoverflow.com/questions/2892816/join-one-row-to-multiple-rows-in-another-table
'programing' 카테고리의 다른 글
| 도커 명명 볼륨 위치 Mac (0) | 2023.09.21 |
|---|---|
| MySql 쿼리에서 RegEx vs LIKE의 성능 (0) | 2023.09.21 |
| MySql은 두 개의 테이블을 동시에 업데이트합니다. (0) | 2023.09.21 |
| aria- expanded= "true"를 사용하여 CSS 속성을 변경하는 방법 (0) | 2023.09.21 |
| 사용자 프로세스 쉐도우 mysqld 서비스, 잘못된 명령은 어떻게 찾을 수 있습니까? (0) | 2023.09.21 |