MySql group_concat 与插入和限制一起使用时的行为

MySql group_concat behaviour when used with insert and a limit

我有点糊涂了。

我有table_a和table_b,还有运行下面的SQL。

table_a

"id"    "addedUser" "addedName"
"1"     "1"         "james"
"2"     "1"         "kirk"
"3"     "1"         "lars"
"4"     "2"         "michael"

table_b

"id"    "userName"  "userDisplay"   "userFreinds"
"1"     "norman"    "james"         "james,kirk,lars"

insert into table_b (
userName,
userDisplay,
userFreinds
) select 'norman', addedName, group_concat(addedName) from table_a where addedUser = 1 limit 1;

我的想法是,将 table_aaddedName 的最高记录放入 table_b,以及所有 addedName 的逗号分隔值列表来自 table_a 的特定用户的值。

我在语句中使用了限制 1,但是 mysql 似乎为我指定的用户提供了 userFriends 的所有 addedName 值的字符串(这很好正是我需要的)。

但是,这是 right/optimum 的方法吗?为什么 MySql 只返回 userDisplay 的单个值,但返回 userFriends 的所有值? group_concat 运行 里面有单独的 select 吗?如果我保持这种方式,我会 运行 遇到性能问题吗?

奇怪的是,即使没有 LIMIT,结果也是一样的。我应该保持限制吗?

有更好的方法吗?结果正是我需要的。我在这里做对或做错了什么?

这就是当你 运行

select 'norman', addedName, group_concat(addedName) from table_a where addedUser=1 limit 1

首先,找到 addedUser = 1 的所有行(table_a 中的 3 行)。

然后,由于您使用的是聚合函数 (group_concat),但没有 GROUP BY 子句,所有 3 行都被视为一个单独的组。

所以最后,您将得到 1 个分组行,其值为 james,kirk,lars 等。您不需要指定 LIMIT 1,因为结果总是只会得到一行。

MySQL 允许将诸如 COUNT() 或 GROUP_CONCAT() 之类的聚合函数与非聚合列(如查询中的 addedName )结合使用,因此可以像您一样使用它, 无限制或有限制。