25

次のMySQLクエリがあるとします。

SELECT
  `show`.`id`
  , GROUP_CONCAT( `showClips`.`clipId` ORDER BY `position` ASC ) AS 'playlist'
FROM
  `show`
  INNER JOIN
    `showClips`
      ON
        ( `show`.`id` = `showClips`.`showId` )
;

含まれている「クリップ」のIDを含む、データベースからすべての「番組」のリストを取得したいと思います。

テーブルにエントリがある限り、これは正常に機能しshowます。この問題では、すべてのテーブルが完全に空であると仮定しましょう。

GROUP_CONCATが返さNULLれ、結果に行が強制されます(NULL値のみが含まれます)。

私のアプリケーションは、1つのショー/結果が存在すると見なします。ただし、その結果は無効になります。もちろんこれはチェックできますが、これはクエリですでに防止できる(そしてそうすべきである)と思います。

4

2 に答える 2

48

GROUP BY最後にを追加するだけです。

テストケース:

CREATE TABLE `show` (id int);
CREATE TABLE `showClips` (clipId int, showId int, position int);

SELECT 
   `show`.`id`,
   GROUP_CONCAT( `showClips`.`clipId` ORDER BY `position` ASC ) AS 'playlist'
FROM  `show`
INNER JOIN `showClips` ON ( `show`.`id` = `showClips`.`showId` )
GROUP BY `show`.`id`;

Empty set (0.00 sec)
于 2010-09-06T15:30:45.533 に答える
11

groupbyを追加しshowます。id、その後、結果は空のテーブルに対して正しくなります。

テーブルemptyt(id int、name varchar(20));を作成します。

   select id, group_concat(name) from emptyt

結果:

 NULL, NULL

groupbyでクエリ

 select id, group_concat(name) from emptyt
 group by Id

結果:

空のデータセット

于 2010-09-06T15:30:09.537 に答える