Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 从一系列年份中选择数字_Mysql_Sql_Database_Sqlite - Fatal编程技术网

Mysql 从一系列年份中选择数字

Mysql 从一系列年份中选择数字,mysql,sql,database,sqlite,Mysql,Sql,Database,Sqlite,我正在尝试执行SQL查询,以便下表: id in_year out_year ------- ---------- ------------- 1 2001 2002 2 2002 2002 3 2004 2007 可以进行查询,以便将该范围内的所有年份映射到id。例如,我希望获得: id ye

我正在尝试执行SQL查询,以便下表:

    id         in_year     out_year 
  -------    ----------  -------------
     1          2001        2002 
     2          2002        2002 
     3          2004        2007 
可以进行查询,以便将该范围内的所有年份映射到id。例如,我希望获得:

    id         year 
 ---------   ---------
     1          2001
     1          2002
     2          2002
     3          2004
     3          2005
     3          2006 
     3          2007

具体地说,假设该表表示一个包含元素的商店,以及元素到达商店和销售日期。该查询将返回映射到它们所在年份的所有元素ID

您可以用数据范围内的年份构建临时表,即

CREATE TABLE tmp_years (
 yr YEAR NOT NULL,
 PRIMARY KEY (yr)
) ENGINE=INNODB;

INSERT INTO tmp_years (yr) VALUES (2000), (2001), (2002), (2003), (2004), (2005), (2006), (2007);
然后进行连接:

SELECT w.id, y.yr FROM wesams_table w 
INNER JOIN tmp_years y ON (y.yr >= w.in_year AND y.yr <= w.out_year);
从wesams_表w中选择w.id,y.yr

内部联接tmp_years y ON(y.yr>=w.in_year和y.yr最整洁的解决方案是创建一个UDF以返回年的范围并使用交叉应用

性能应该相当好,因为UDF是确定性的


编辑:对不起,我认为这不适用于MySQL。

没有一个优雅的解决方案(但您可以创建SP或具有年加入时间的临时表)-更好的方法是在您的应用程序中这样做。我实际上正试图通过使用临时表来实现。如何进行联接?创建一个带有数字
1..42
的临时表,并使用
在out year上联接当前表。我不确定这是否可行。我无法对数据或范围进行假设,因为它将动态变化。F例如,我想做的是找到最短的开始时间年和最长的结束时间年,从最小-最大范围生成一个临时表,然后进行连接。你明白我的意思吗?