[英]Is there a query to join a many-to-many linked table into a single record?
我在兩個表之間建立了標准的多對多關系,使用第三個鏈接表進行了鏈接。 無論如何,通過查詢將鏈接的ID連接到一條記錄中?
我意識到我可以處理典型的聯接並以此建立一個新列表,只是想知道是否可以通過查詢來完成。 例:
EventID | EventName | EventTypeIDs
1 | Party | 1,2,3
Events
+-------------+-------------+
| Field | Type |
+-------------+-------------+
| EventID | INT |
| EventName | varchar(45) |
+-------------+-------------+
EventTypes
+-------------+-------------+
| Field | Type |
+-------------+-------------+
| id | INT |
| value | varchar(25) |
+-------------+-------------+
EventTypeLink
+-------------+-------------+
| Field | Type |
+-------------+-------------+
| id | INT |
| EventID | INT |
| EventTypeID | INT |
+-------------+-------------+
就在這里。 像這樣使用GROUP_CONCAT()
:
SELECT
e.EventId,
e.EventName,
GROUP_CONCAT(t.Id SEPARATOR ',') AS EventTypeIDs
FROM Events e
INNER JOIN EventTypeLink l ON e.EventId = l.EventId
INNER JOIN EventTypes t ON l.EventTypeId = t.Id
GROUP BY e.EventId,
e.EventName;
這將為您提供:
| EVENTID | EVENTNAME | EVENTTYPEIDS |
--------------------------------------
| 1 | Party | 1,2,3 |
請注意:如果需要包含沒有類型的事件,請使用帶有IFNULL
的LEFT JOIN
代替, IFNULL
所示:
SELECT
e.EventId,
e.EventName,
GROUP_CONCAT(IFNULL(t.Id,0) SEPARATOR ',') AS EventTypeIDs
FROM Events e
LEFT JOIN EventTypeLink l ON e.EventId = l.EventId
LEFT JOIN EventTypes t ON l.EventTypeId = t.Id
GROUP BY e.EventId,
e.EventName;
這將為您提供以下信息:
| EVENTID | EVENTNAME | EVENTTYPEIDS |
---------------------------------------------
| 1 | Party | 3,2,1 |
| 2 | EventWithNoTypes | 0 |
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.