簡體   English   中英

未返回group_concat為null值的行

[英]Rows with null value for group_concat not returned

我有以下MySQL查詢,它應該從表a和b(一對多關系)返回記錄,還有一個逗號分隔列表,其中包含從表c返回的任何值。 但是,表c中並不總是有記錄(這就是為什么我使用LEFT OUTER JOIN將它連接到表a)。

SELECT  `a`.`id` , `a`.`name` , `b`.`id` AS  `b_id` , `b`.`name` AS  `b_name` , GROUP_CONCAT(  `c`.`l_id` ) AS  `c_ls`
FROM  `a`
INNER JOIN  `b` ON  `a`.`b_id` =  `b`.`id`
LEFT OUTER JOIN  `c` ON  `a`.`id` = `c`.`a_id`
GROUP BY `a`.`id`
ORDER BY  `a`.`created` DESC

上面的查詢在返回時返回1條記錄2.記錄1在表c中有3條匹配記錄,記錄2在表c中有0條匹配記錄。

查詢返回:

id | name | b_id | b_name | c_ls
1  | John |   2  |  Bla   | [BLOB - 3 B]

如果我刪除GROUP_CONCAT和GROUP_BY子句,則返回2條記錄:

id | name | b_id | b_name | c_ls
1  | John |   2  |  Bla   | [BLOB - 3 B]
2  | Fred |   3  |  Blo   | [BLOB - NULL]

似乎如果c_ls為null,則GROUP_CONCAT將停止返回該行。 關於我做錯了什么的任何想法?

不幸的是,之前標記為正確的答案是錯誤的(正如用戶desaivv在評論中指出的那樣)。

它必須讀取IFNULL ,[不是ISNULL,isnull只需要一個參數並返回一個布爾值]!

如果為null,IFNULL返回第二個參數:

SELECT  `a`.`id` , `a`.`name` , `b`.`id` AS  `b_id` , `b`.`name` AS  `b_name` ,   
IFNULL(GROUP_CONCAT(  `c`.`l_id` ), '') AS  `c_ls`
FROM  `a`
INNER JOIN  `b` ON  `a`.`b_id` =  `b`.`id`
LEFT OUTER JOIN  `c` ON  `a`.`id` = `c`.`a_id`
GROUP BY `a`.`id`
ORDER BY  `a`.`created` DESC

但這根本不是解決方案! 我們需要的是一個“錯綜復雜的”加入 -

所以請檢查這個SQL小提琴: http ://www.sqlfiddle.com/#!2 / 54c6f/3 /0

嘗試使用LEFT JOIN而不是INNER JOIN

嘗試這個 -

SELECT  `a`.`id` , `a`.`name` , `b`.`id` AS  `b_id` , `b`.`name` AS  `b_name` , ISNULL(GROUP_CONCAT(  `c`.`l_id` ), '') AS  `c_ls`
FROM  `a`
INNER JOIN  `b` ON  `a`.`b_id` =  `b`.`id`
LEFT OUTER JOIN  `c` ON  `a`.`id` = `c`.`a_id`
GROUP BY `a`.`id`
ORDER BY  `a`.`created` DESC

添加ISNULL以檢查Group_concat是否為null並返回空白而不是NULL

暫無
暫無

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

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