1

我正在尝试执行如下表的 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。

4

2 回答 2

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);

然后做一个JOIN:

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);
于 2013-02-18T01:53:53.203 回答
0

最整洁的解决方案是创建一个 UDF 来返回年份范围并使用 CROSS APPLY。

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

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

于 2013-02-18T02:11:25.993 回答