没有输入数据时,如何防止 GROUP_CONCAT 创建结果?
Posted
技术标签:
【中文标题】没有输入数据时,如何防止 GROUP_CONCAT 创建结果?【英文标题】:How to prevent GROUP_CONCAT from creating a result when no input data is present? 【发布时间】:2011-04-08 19:56:06 【问题描述】:给定以下 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】:您应该在末尾添加一个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)
【讨论】:
值得一提的是,如果您想避免从空集创建结果但不希望结果按任何特定列分组,您可以使用GROUP BY NULL
【参考方案2】:
按show
.id
添加分组,则空表的结果将正确:
create table emptyt(id int, name varchar(20));
select id, group_concat(name) from emptyt
结果:
NULL, NULL
分组查询
select id, group_concat(name) from emptyt
group by Id
结果:
空数据集
【讨论】:
谢谢。我会将丹尼尔的回复标记为答案,因为他似乎快了一秒。以上是关于没有输入数据时,如何防止 GROUP_CONCAT 创建结果?的主要内容,如果未能解决你的问题,请参考以下文章
当没有匹配的记录时,如何将与另一个表连接的 group_concat 列更改为空字符串而不是 null?
MUI 自动完成:如何防止在焦点上打开,而不是在输入更改时打开?