2

私はこのテーブルを持っています:

item        year
----        ----
1           1999 
2           1999
3           1999 
2           2000 
4           2000 
2           2001
3           2001
4           2001
5           2001

この結果が必要です (1999 を選択)

item        year
----        ----
4           2000
4           2001
5           2001

要約すると、1999 年ではなく、別の別の年に定義された新しいアイテムを取得する必要があります (これは、後で別のクエリでそれらを追加するためです)。

古いバージョンの MySQL を使用していて、サブクエリを使用できません。互換性のあるソリューションはありますか?

4

2 に答える 2

2

このようなものはどうですか

SELECT t1.item, t1.year from table as t1
LEFT JOIN table as t2 ON t2.item = t1.item AND t2.year = 1999
WHERE t2.item IS NULL

「英語」とは、私のテーブルからすべてのアイテムを選択することを意味します。次に、各アイテムについて、1999年のテーブルにあるかどうかを調べ、そうでない場合はNULLを入力します。次に、「t2に一致する要素がない要素を保持する」と言う必要があります。

とにかく私の説明が良いかどうかわからない

編集:もちろんtable、自分のテーブルの名前に置き換える必要があります。小さな例でテストしましたが、うまくいくようです。

EDIT2:LEFT JOINの結果を見ると、次のようになります。

t1.item     t1.year    t2.item     t2.year
----        ----       ----        ----       
1           1999       1           1999
2           1999       2           1999
3           1999       3           1999
2           2000       2           1999
4           2000       NULL        NULL
2           2001       2           1999
3           2001       3           1999
4           2001       NULL        NULL
5           2001       NULL        NULL

次に、追加するWHERE t2.item IS NULL場合は、1999年を持たないものだけをテーブルに保持します。それを理解するためのより良い方法ですか?

于 2012-11-16T11:34:40.830 に答える
1
select t2.item, t2.year
from mytable t1
left join mytable t2 
    on t2.year > t1.year 
    and t2.item != t1.item
where t1.year = 1999
and t2.item is null
于 2012-11-16T11:46:27.557 に答える