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

最も適切な解決策は、UDF を作成して年の範囲を返し、CROSS APPLY を使用することです。

UDF は決定論的であるため、パフォーマンスはかなり良いはずです。

編集: 申し訳ありませんが、これは MySQL には当てはまらないと思います。

于 2013-02-18T02:11:25.993 に答える
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 に答える