0

コースとコース名の変更を何年にもわたって保存する2つのテーブルがあります

テーブルコース

year, record
2009, 'Basic English 101'
2009, 'Maths 100'
2010, 'Introduction to English 102'
2010, 'Maths 101'
2010, 'History 100'
2011, 'English 103'
2012, 'Maths 102'

テーブルの変更

year, oldrecord', 'newrecord' 
2010, 'Basic English 101', 'Introduction to English 102'
2010, 'Maths 100', 'Maths 101'
2011, 'Introduction to English 102', 'English 103' 
2012, 'English 103', 'English 104'
2012, 'Maths 101' 'Maths 102'

私が欲しいのは、何年にもわたってコース名を表示することです、

このクエリで、2009年と2010年の英語101の次のレコードを取得することができます

SELECT year, record AS coursename FROM courses 
WHERE record= 'Basic English 101'
UNION
SELECT Year, newrecord FROM changes 
WHERE newrecord = (SELECT newrecord FROM changes WHERE oldrecord='Basic English 101')

結果

year, coursename
2009, 'Basic English 101'
2010, 'Introduction to English 102'

私の質問は、新しいレコードの値に基づいて、他の年の残りのレコードをどのように取得するかです。

別のサブクエリを実行できますが、コースが2つに分割されている場合、サブクエリは複数の行エラーを返します。

ありがとう。

4

1 に答える 1

0

名前に依存せずにコースをリンクする一意のIDフィールドを両方のテーブルに追加する必要があります。これを自動インクリメントの主キーを使用して整数にします。

テーブルコースには、現在の名前のみを保存する必要があります

year, record_id, record,
2010, 1, 'History 100'
2011, 2, 'English 103'
2012, 3, 'Maths 102'

テーブルの変更は、関連するrecord_idを参照する必要があります

year, record_id, oldrecord, newrecord 
2010, 2, 'Basic English 101', 'Introduction to English 102'
2010, 3, 'Maths 100', 'Maths 101'
2011, 2, 'Introduction to English 102', 'English 103' 
2012, 2, 'English 103', 'English 104'
2012, 3, 'Maths 101' 'Maths 102'

次に、次のような操作を行うことで、たとえば英語のレコードの完全な履歴を取得できます。

SELECT oldrecord FROM changes WHERE record_id = 2
于 2012-04-03T21:28:55.247 に答える