限制group_concat()的结果

时间:2018-10-29 14:43:43

标签: mysql

我有两个简单的表

     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号。

1 个答案:

答案 0 :(得分:3)

Derived table中,首先仅获得 50 行。现在,您可以将此结果集用于Group_concat()

不过,请注意Docs中的这一要点:

  

结果被截断为由   group_concat_max_len系统变量,其默认值为   1024。尽管返回值的有效最大长度受的值限制,但可以将值设置得更高。   max_allowed_pa​​cket。

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