我有一个列,我希望检索一行中的所有匹配项。我也在查询其他数据。目前我正在使用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
答案 1 :(得分: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
答案 2 :(得分:0)
尝试以下查询
SELECT item_num, GROUP_CONCAT(ISNULL(item_desc,'')) AS alldesc FROM table1 LEFT JOIN table2 ON table1.id = table2.oneid
答案 3 :(得分: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