2015-11-24 20 views
0

我想我可能會試圖對我的代碼太狡猾:p 我試圖將2個表連在一起,一個連成一排,另一個連成幾個。但我只想爲第一個表格和另一個表格返回一行。所以我想用GROUP_CONCAT改變我加入到一行,像這樣:在左連接中使用group_concat

col 1 || col 2 || col 3 (linked) 
---------------------------------- 
    23 || Data || data, data, data 

再後來我可以打破這個了。

我認爲問題是,這隻有真正有效,如果你有東西要加入?如果我沒有加入行,那麼他們似乎被忽略了?如果我在子查詢中這樣做,它會返回null?

這是我的查詢

子查詢

SELECT * FROM wp_fishy_posts p 
    LEFT JOIN (SELECT GROUP_CONCAT(i.path,',') AS linked_images,l.postID as link_id 
     FROM wp_fishy_images i 
     LEFT JOIN wp_fishy_images_post_link l ON l.imageID=i.ID) AS l ON l.link_id=p.ID 
    WHERE p.post_type='image' 

返回空當行結合?

SELECT GROUP_CONCAT(i.path,',') AS linked_images,p.* 
FROM wp_fishy_posts p 
(SELECT i.path,l.postID as link_id 
    FROM wp_fishy_images i 
    LEFT JOIN wp_fishy_images_post_link l ON l.imageID=i.ID) AS l ON l.link_id=p.ID 
WHERE p.post_type='image' 

不確定我在做什麼錯? :S預先感謝!

+0

的GROUP_CONCAT通過使用一組,不一定與連接(雖然查詢可以包含一個連接) – DBug

+0

如果你知道另外兩個表是1對於1,應該不需要子查詢。而且,和大多數聚合函數一樣,GROUP_CONCAT應該忽略空值,除非沒有處理非空值。 – Uueerdo

回答

1

您在子查詢需要group by

SELECT * 
FROM wp_fishy_posts p LEFT JOIN 
    (SELECT GROUP_CONCAT(i.path,',') AS linked_images, l.postID as link_id 
     FROM wp_fishy_images i LEFT JOIN 
      wp_fishy_images_post_link l 
      ON l.imageID = i.ID 
     GROUP BY l.postId 
------^ 
    ) l 
    ON l.link_id = p.ID 
WHERE p.post_type = 'image'; 
+0

謝謝!沒有意識到我需要一個組:) – sourRaspberri