我有两个简单的表
table1 table2
| id | name | | id | name |
| 1 | name_1 | | 1 | name-1 |
| 2 | name_2 | | 2 | name-2 |
| 3 | name_3 | | 3 | name-3 |
................... ...................
100 row 10000 row
我像这样从这些表中获取名字
select
(
select group_concat(name) from table1
) as t1
,
(
select group_concat(name) from table2
) as t2
但我想将行结果限制为仅 50行
如何有效地做到这一点。
我得到的结果就是这样
t1: name_1, name_2, name_3 . . . , name_100
t2: name-1, name-2, name-3 . . . , name-10000
但是我要停在50号。
答案 0 :(得分:3)
在Derived table中,首先仅获得 50 行。现在,您可以将此结果集用于Group_concat()
不过,请注意Docs中的这一要点:
结果被截断为由 group_concat_max_len系统变量,其默认值为 1024。尽管返回值的有效最大长度受的值限制,但可以将值设置得更高。 max_allowed_packet。
50 值很可能会生成一个很长的字符串(超过1024个字符)。如果在运行查询之前不增加group_concat_max_len
系统变量的值,则结果将被截断:
-- increasing group_concat_max_len for this session
SET SESSION group_concat_max_len = @@max_allowed_packet;
SELECT GROUP_CONCAT(dt.name ORDER BY dt.id)
FROM
(
SELECT id, name
FROM table1
ORDER BY id LIMIT 50
) AS dt