[英]MySQL Join Multiple Rows as Columns
假設我在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
從數據庫中選擇行時,有沒有辦法將第二個表中的行作為列連接到第一個表? 目前我正在使用SELECT * FROM Table1 NATURAL JOIN Table2
。
這輸出:
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並查看它們是否相同然后進行相應排序。 我覺得有一種方法可以在MySQL中做到這一點,而無需將其排序到PHP中的數組中。 每個ID在第二個表中可以有無限數量的條目。
MySQL查詢中的所需結果是:
ID Name Race1 Race2 Race3
1 Jim 2nd 3rd 4th
2 Bob 1st 2nd 2nd
我不能在表格中為Race1,Race2等制作列,因為每個ID可以有無限數量的比賽。
謝謝你的幫助!
INNER JOIN
足以滿足您的需求。 MySQL沒有PIVOT
功能,你仍然可以使用CASE
和MAX()
函數來模擬它。
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
但是如果你有未知數量的RACE
,那么DYNAMIC 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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.