我正在尝试执行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。
答案 0 :(得分:0)
您可以使用您的数据范围中的年份构建临时表,例如
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);
答案 1 :(得分:0)
最整洁的解决方案是创建一个UDF来返回年份并使用CROSS APPLY。
性能应该相当不错,因为UDF将是确定性的
编辑:对不起,我认为这不适用于MySQL。