簡體   English   中英

是否存在將多對多鏈接表聯接到單個記錄的查詢?

[英]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;

SQL小提琴演示

這將為您提供:

| EVENTID | EVENTNAME | EVENTTYPEIDS |
--------------------------------------
|       1 |     Party |        1,2,3 |

請注意:如果需要包含沒有類型的事件,請使用帶有IFNULLLEFT 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;

適用於無類型用戶的SQL Fiddle演示

這將為您提供以下信息:

| EVENTID |        EVENTNAME | EVENTTYPEIDS |
---------------------------------------------
|       1 |            Party |        3,2,1 |
|       2 | EventWithNoTypes |            0 |

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM