MySQL GROUP_CONCAT的一系列数字

时间:2016-08-09 10:00:10

标签: mysql loops range group-concat

我有一张像......的桌子。

year_from| year_to |...            
---------|---------|----
  1990   |  1993   |...     -> 1990 1991 1992 1993            
  2000   |  2004   |...     -> 2000 2001 2002 2003 2004
  2003   |  2005   |...     -> 2003 2004 2005

我试图找出是否有一种方法只能用SQL以干净的方式生成一个列打印愤怒(在嵌套选择中循环和GROUP_CONCAT之间的混合类型),但我不明白。 这将是来自其他表的全文搜索列索引,并且因为我有一个受限制的MySQL版本(5.6),实际上性能在这个问题上并不重要,优先级是保留单个sql并避免创建任何过程。 欢迎任何评论! &安培;提前谢谢

1 个答案:

答案 0 :(得分:0)

您可以使用包含所有可用年份的派生表来执行此操作,如下所示:

SELECT s.year_from,s.year_to,GROUP_CONCAT(t.year_col SEPARATOR ' ') as new_col
FROM(
    SELECT 1990 as year_col UNION ALL SELECT 1991 UNION ALL SELECT 1992 ...--ALL THE YEARS HERE
    ) t
INNER JOIN YourTable s
 ON(t.year between s.year_from and s.year_to)
GROUP BY s.year_from,s.year_to

将产生:

year_from | year_to | new_col
  1990        1993     1990 1991 1992 1993
  ....