-1

我有一列,我希望检索一行中的所有匹配项。我也在查询其他数据。目前我正在使用 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 时,我正在寻找一个带有占位符的列表。

4

4 回答 4

1

这对你有用吗(当它为NULL时使用描述作为空字符串)?

SELECT item_num, 
       REPLACE(GROUP_CONCAT(IFNULL(item_desc,' ')), ', ,', ',') AS alldesc 
FROM table1 
LEFT JOIN table2 
ON table1.id = table2.oneid
于 2012-11-05T06:46:01.087 回答
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
于 2012-11-05T07:00:53.023 回答
0

尝试以下查询

SELECT item_num, GROUP_CONCAT(ISNULL(item_desc,'')) AS alldesc FROM table1 LEFT JOIN table2 ON table1.id = table2.oneid
于 2012-11-05T06:45:55.943 回答
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
于 2012-11-05T07:01:38.977 回答