小编典典

如何获取MySQL中的数字列表?

sql

我有一个电影数据库,我想要列出当年没有电影的年份。所以我只需要一个列表(1900 .. 2012),然后我就可以加入和加入而不是加入。

我有:

CREATE PROCEDURE build_years(p1 SMALLINT) 
BEGIN 
    CREATE TEMPORARY TABLE year (year SMALLINT(5) UNSIGNED); 
    label1: LOOP 
        INSERT INTO year VALUES (p1); 
        SET p1 = p1 + 1; 
        IF p1 > 2012 THEN LEAVE label1; END IF; 
    END LOOP; 
END

但这似乎是非SQL的,并且与运行Python代码来创建同一张表相比,仅略微减少了麻烦。我真的很喜欢那些不使用存储过程,不使用循环并且不使用实际表的东西,以这种关注的顺序。


阅读 207

收藏
2021-03-10

共1个答案

小编典典

几年前我也遇到过类似的问题。我的解决方案是:

1.顺序表

我创建了一个表格,该表格充满了从0到<所需的整数序列>>:

CREATE TABLE numbers (n INT);
INSERT INTO numbers VALUES (0),(1),(2),(3),(4);
INSERT INTO numbers SELECT n+5 FROM numbers;
INSERT INTO numbers SELECT n+10 FROM numbers;
INSERT INTO numbers SELECT n+20 FROM numbers;
INSERT INTO numbers SELECT n+40 FROM numbers;
etc.

它仅执行一次,因此可以从您的应用程序外部创建,甚至可以手动创建。

2.选择所需类型和范围的数据

对于整数,这很明显-即范围1..99:

SELECT n FROM numbers WHERE n BETWEEN 1 AND 99;

日期-从现在到+2天,间隔2小时:

SELECT date_add(now(),INTERVAL 2*n HOUR) FROM numbers WHERE n BETWEEN 0 AND 23;

因此,在您的情况下,可能是:

SELECT n+1900 AS n_year FROM numbers WHERE n BETWEEN 0 AND 112;

然后JOIN就可以了n_year

2021-03-10