我有点困惑。
我有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;
我的想法,是从获得最顶部的记录addedName
在table_a
进入table_b
,用逗号名单沿着分开所有的值addedName
从值table_a
特定用户。
我在语句中使用限制1,但是mysql似乎为我指定的用户提供了所有addedName
值的字符串userFriends
(这很好,正是我所需要的)。
但是,这是执行此操作的正确/最佳方法吗?MySql如何仅返回的单个值userDisplay
,而只返回的所有值userFriends
?是否group_concat
在其中运行单独的选择?如果保持这种方式,是否会遇到性能问题?
奇怪的是,即使没有LIMIT,结果也是相同的。我应该在那里保持极限吗?
有一个更好的方法吗?结果正是我所需要的。我在这里做对还是错?
这是您跑步时发生的情况
select 'norman', addedName, group_concat(addedName) from table_a where addedUser=1 limit 1
首先,找到所有添加用户= 1的行(来自table_a的3行)。
然后,由于您使用的是集合函数(group_concat
),但没有GROUP BY
子句,因此3行全部视为一个单独的组。
因此,最后,您将获得1个分组行,并带有值james,kirk,lars
等。您无需指定,LIMIT 1
因为这样一来,您将始终只获得一行。
MySQL允许将诸如COUNT()或GROUP_CONCAT()之类的聚合函数与非聚合列(如查询中的addedName)结合使用,因此可以像您一样使用它,没有限制或与之配合使用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句