簡體   English   中英

GROUP_CONCAT具有多個LEFT JOIN

[英]GROUP_CONCAT with multiple LEFT JOINs

您好,我對具有多個LEFT JOIN的GROUP_CONCAT有問題。

我有保存數據的主表connectors ,但是由於mysql表無法保存數組,因此我將它們存儲在不同的表modulessubassemblies集中,並且數組中的每個元素都有自己的行。 當這些數組的長度相同時,我的查詢工作正常,但是當我從模塊表中獲取3行但從subassemblies表中僅獲取3行時,我得到錯誤的結果。

示例結果:

id     modulepath     subassemblypath
1      mp1|mp2|mp3    sp1|sp1|sp1              my result
1      mp1|mp2|mp3    sp1                      expected result

連接器表:

id     data
1      lorem
2      ipsum
3      data

模塊表:

id     cid     modulepath
28     1       mp1
29     1       mp2
36     1       mp3
56     3       mp4
85     2       mp5

子裝配表:

id     cid     subassemblypath
26     1       sp1
31     2       sp2
48     2       sp3
56     3       sp4

我的查詢:

SELECT 
c.*, 
GROUP_CONCAT(m.modulepath SEPARATOR "|") AS modulepath, 
GROUP_CONCAT(s.subassemblypath SEPARATOR "|") AS subassemblypath 
FROM connectors c 
LEFT JOIN modules m ON m.cid = c.id 
LEFT JOIN subassemblies s ON s.cid = c.id 
GROUP BY c.id;

嘗試將查詢分為兩個,然后執行聯接

SELECT c.*, t2.modulepath, t1.subassemblypath 
FROM connectors c 
JOIN (
  SELECT 
   s.cid,
   GROUP_CONCAT(s.subassemblypath SEPARATOR "|") AS subassemblypath 
  FROM subassemblies s
  GROUP BY s.cid
) t1 ON c.id = t1.cid
JOIN
(
  SELECT 
   m.cid,
   GROUP_CONCAT(m.modulepath SEPARATOR "|") AS modulepath
  FROM modules m
  GROUP BY m.cid
) t2 ON c.id = t2.cid

暫無
暫無

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

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