-1

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、常に1行が返される可能性があります。

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 に答える