2012-11-05 83 views
-1

我有一列,我正在尋找檢索一行中的所有匹配。我也在查詢其他數據。目前我正在使用group_concat。迄今爲止這一直很好。有時在這個列中有可能的NULL值,並且這一直阻止返回任何東西。MySQL Group Concat單列NULL

我已經嘗試了各種其他解決方案張貼在這裏沒有成功。

CREATE TABLE table1 (
id mediumint(9) NOT NULL AUTO_INCREMENT, 
item_num mediumint(9) NOT NULL, 
PRIMARY KEY (id) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; 

CREATE TABLE table2 (
id mediumint(9) NOT NULL AUTO_INCREMENT, 
oneid mediumint(9) NOT NULL, 
item_desc varchar(16) NOT NULL, 
PRIMARY KEY (id) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; 

SELECT item_num, GROUP_CONCAT(item_desc) AS alldesc FROM table1 LEFT JOIN table2 ON table1.id = table2.oneid 

所以基本上,可以有幾個項目描述可能是NULL;他們也將沒有特定的順序。所以我正在尋找一個佔位符列表時出現NULL。

+0

您可以顯示你想要的結果? –

回答

1

這是否對你的工作(使用說明爲空字符串時,它是NULL)?

SELECT item_num, 
     REPLACE(GROUP_CONCAT(IFNULL(item_desc,' ')), ', ,', ',') AS alldesc 
FROM table1 
LEFT JOIN table2 
ON table1.id = table2.oneid 
+0

tendecy of this is if 3 values with'null' you get something像這樣,'你好,世界,',', –

+0

我不知道爲什麼,但沒有。如果沒有NULL,它工作正常。但如果有一個null,那麼它仍然不會給任何東西 – foochow

+0

@JohnWoo:我添加了'REPLACE'方法來處理空的逗號。希望這很好。 –

0

嘗試以下查詢

SELECT item_num, GROUP_CONCAT(ISNULL(item_desc,'')) AS alldesc FROM table1 LEFT JOIN table2 ON table1.id = table2.oneid 
+0

這是一個tendecy,如果有3個值用'null',你會得到像這樣的東西,''hello,world,,',' –

1

你缺少在查詢GROUP BY。很可能如果你有多個item_num,它總會返回一行。

SELECT item_num, GROUP_CONCAT(item_desc) AS alldesc 
FROM  table1 LEFT JOIN table2 
      ON table1.id = table2.oneid 
GROUP BY item_num 
+0

不會錯過羣;簡化查詢 – foochow

0
SELECT item_num, 
REPLACE(
    GROUP_CONCAT(
     IFNULL(item_desc,'*!*') -- replace this with something not in a normal item_desc 
     ORDER BY if(item_desc is null, 1, 0) desc 
), '*!*,','') AS alldesc 
FROM table1 
LEFT JOIN table2 
ON table1.id = table2.oneid 
GROUP BY item_num