[SQL] 열 등 여러 행을 가입 MYSQL
SQL열 등 여러 행을 가입 MYSQL
내가 MySQL 데이터베이스에 두 개의 테이블이 있다고.
1 번 테이블:
ID Name
1 Jim
2 Bob
표 2 :
ID Place Race_Number
1 2nd 1
1 3rd 2
1 4th 3
2 1st 1
2 2nd 2
2 2nd 3
데이터베이스에서 행을 선택할 때 첫 번째 테이블에 열로 두 번째 테이블에서 행을 가입 할 수있는 방법은 무엇입니까? 현재 내가 표 NATURAL로부터 SELECT *를 사용하고는 표 2 가입하세요.
이 출력 :
ID Name Place Race_Number
1 Jim 2nd 1
1 Jim 3rd 2
1 Jim 4th 3
2 Bob 1st 1
2 Bob 2nd 2
2 Bob 2nd 3
현재 내가 배열로 정렬 내 PHP 스크립트에서이를 통해 분류하고있다. 나는 ID를 봐야하고 정렬 따라 다음 같은 및이라면 보는 바와 같이 이것은 고통이다. 은 PHP에서 배열로 정렬하지 않고, MySQL은이 권리를 할 수있는 방법이 같은 느낌. 각 ID에 대한 두 번째 테이블의 항목에 제한이있을 수 있습니다.
MySQL의 쿼리에서 원하는 결과의 권리는 다음과 같습니다
ID Name Race1 Race2 Race3
1 Jim 2nd 3rd 4th
2 Bob 1st 2nd 2nd
각 ID에 대한 인종의 무제한이있을 수 있기 때문에 나는 테이블 자체 Race1, Race2 등을위한 열 수 없습니다.
어떤 도움을 주셔서 감사합니다!
해결법
-
==============================
1.내부 사용자의 요구에 충분 가입하세요. MySQL은 여전히 CASE 및 MAX () 함수를 사용하여 시뮬레이션 할 수 없음 PIVOT 기능이 없습니다.
내부 사용자의 요구에 충분 가입하세요. MySQL은 여전히 CASE 및 MAX () 함수를 사용하여 시뮬레이션 할 수 없음 PIVOT 기능이 없습니다.
SELECT a.ID, a.NAME, MAX(CASE WHEN b.Race_Number = 1 THEN b.Place ELSE NULL END) Race1, MAX(CASE WHEN b.Race_Number = 2 THEN b.Place ELSE NULL END) Race2, MAX(CASE WHEN b.Race_Number = 3 THEN b.Place ELSE NULL END) Race3 FROM Table1 a INNER JOIN Table2 b ON a.ID = b.ID GROUP BY a.ID, a.Name
당신이 인종의 알 수없는 번호가있는 경우, 그때 동적 SQL은 훨씬 더 바람직하다.
SET @sql = NULL; SELECT GROUP_CONCAT(DISTINCT CONCAT('MAX(CASE WHEN b.Race_Number = ', Race_Number, ' THEN b.Place END) AS ', CONCAT('`Race', Race_Number, '`')) ) INTO @sql FROM Table2; SET @sql = CONCAT('SELECT s.Student_name, ', @sql, ' FROM Table1 a LEFT JOIN Table2 b ON ON a.ID = b.ID GROUP BY a.ID, a.Name'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
from https://stackoverflow.com/questions/15462753/mysql-join-multiple-rows-as-columns by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SET 필드에서 값을 제거하는 가장 좋은 방법은? (0) | 2020.05.22 |
---|---|
[SQL] 어떻게 CodeIgniter의 내 SQL 쿼리를 실행합니다 (0) | 2020.05.22 |
[SQL] T-SQL 건너 뛰기는 저장 프로 시저를 가지고 가십시오 (0) | 2020.05.22 |
[SQL] 저장 프로 시저를 사용하여 대량 삽입 (0) | 2020.05.22 |
[SQL] SQL : 어떻게 하나의 열에서 여러 기준을 충족하는 하나의 아이디 ( "행")를 선택합니다 (0) | 2020.05.22 |