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_a
中 addedName
的最高记录放入 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 )结合使用,因此可以像您一样使用它, 无限制或有限制。
我有点糊涂了。
我有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_a
中 addedName
的最高记录放入 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 )结合使用,因此可以像您一样使用它, 无限制或有限制。