【发布时间】:2012-10-03 11:59:05
【问题描述】:
DROP TABLE IF EXISTS `table`;
CREATE TABLE `table` (
`id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,
`text` text COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
INSERT INTO `table` VALUES ('1', 'Unpacked reserved sir offering bed judgment may and quitting speaking. Is do be improved raptures offering required in replying raillery. Stairs ladies friend by in mutual an no. Mr hence chief he cause. Whole no doors on hoped. Mile tell if help they ye full name. \r\n\r\nLadyship it daughter securing procured or am moreover mr. Put sir she exercise vicinity cheerful wondered. Continual say suspicion provision you neglected sir curiosity unwilling. Simplicity end themselves increasing led day sympathize yet. General windows effects not are drawing man garrets. Common indeed garden you his ladies out yet. Preference imprudence contrasted to remarkably in on. Taken now you him trees tears any. Her object giving end sister except oppose. \r\n\r\nWas justice improve age article between. No projection as up preference reasonably delightful celebrated. Preserved and abilities assurance tolerably breakfast use saw. And painted letters forming far village elderly compact. Her rest west each spot his and you knew. Estate gay wooded depart six far her. Of we be have it lose gate bred. Do separate removing or expenses in. Had covered but evident chapter matters anxious.');
INSERT INTO `table` VALUES ('2', 'Unpacked reserved sir offering bed judgment may and quitting speaking. Is do be improved raptures offering required in replying raillery. Stairs ladies friend by in mutual an no. Mr hence chief he cause. Whole no doors on hoped. Mile tell if help they ye full name. \r\n\r\nLadyship it daughter securing procured or am moreover mr. Put sir she exercise vicinity cheerful wondered. Continual say suspicion provision you neglected sir curiosity unwilling. Simplicity end themselves increasing led day sympathize yet. General windows effects not are drawing man garrets. Common indeed garden you his ladies out yet. Preference imprudence contrasted to remarkably in on. Taken now you him trees tears any. Her object giving end sister except oppose. \r\n\r\nWas justice improve age article between. No projection as up preference reasonably delightful celebrated. Preserved and abilities assurance tolerably breakfast use saw. And painted letters forming far village elderly compact. Her rest west each spot his and you knew. Estate gay wooded depart six far her. Of we be have it lose gate bred. Do separate removing or expenses in. Had covered but evident chapter matters anxious');
在不使用GROUP_CONCAT() 的情况下运行GROUP BY 查询时,结果集符合预期(显示两行,text 的每个变体各一行):
SELECT
`text`
FROM
`table`
GROUP BY
`text`;
+-----------------------------------+
| text |
+-----------------------------------+
| Unpacked reserved sir offering... |
| Unpacked reserved sir offering... |
+-----------------------------------+
2 rows in set (0.02 sec)
但是,当使用GROUP_CONCAT() 运行相同的查询时,结果集与预期不符(显示一行包含两个id 字段的串联字符串):
SELECT
GROUP_CONCAT(`id` SEPARATOR ', ') AS ids
FROM
`table`
GROUP BY
`text`;
+------+
| ids |
+------+
| 1, 2 |
+------+
1 row in set (0.00 sec)
我的问题:
为什么使用GROUP_CONCAT() 会影响返回的行数?
我最初的假设是 GROUP_CONCAT_MAX_LEN 与它有关(我的设置为 1024)但肯定只会影响 GROUP_CONCAT(),而不是 GROUP BY(另外,正如您可能注意到的那样,我正在使用 @ 987654333@ 在id 字段上,而不是text 字段上,其结果甚至没有接近超过GROUP_CONCAT_MAX_LEN)。
【问题讨论】:
-
我运行了你的 SQL,得到两行,分别包含 ids 1 和 2。所以我无法重现这个问题。最可能的问题(通常)是超出列大小并被截断的文本。
-
您的
text字段的值不同。 -
是的,但是当我包含 GROUP_CONCAT() 时,我在结果集中得到一行而不是两行。
-
rjh:但是如何将函数添加到选定字段绕过/影响按条件分组?
-
您的编辑:我假设 GROUP_CONCAT_MAX_LEN 值不适用于 GROUP BY,因此它返回两行,因为它不会截断它们。
标签: mysql select group-by group-concat