以下に示すように、表Recording
には3つの外部キーが含まれており、1つのエントリに対して1つだけが入力されます。私の質問は、Accessでselectステートメントをフォーマットして、そのテーブルの外部キーを指定して、関連するテーブルからのみ名前を取得する方法を教えてください。
SELECTの後でどの外部キーがNullでないかをチェックするときに機能するIIfを使用してみました。
SELECT Recording.[idRecording],
IIf(Recording.[Artist_idArtist] Is Not Null,
Artist.[artName] ,
IIf(Recording.[Band_idBand] is Not Null,
Band.[bName],
Composer.[cName]))
FROM ...
ただし、正しいJOINを取得するために、FROMステートメントの後に条件を設定すると、エラーが発生します。
FROM
IIf(Recording.[Artist_idArtist] Is Not Null,
Artist INNER JOIN Recording ON Recording.[Artist_idArtist] = Artist.[idArtist],
IIf(Recording.Band_idBand Is Not Null,
Band INNER JOIN Recording ON Recording.[Band_idBand] = Band.[idBand],
Composer INNER JOIN Recording ON Recording.[Composer_idComposer] = Composer.[idComposer]));
私はこれに慣れていないので、おそらく明らかな何かを見逃しているか、間違った方法でそれを行っています。私がここで終わったのは排他的なアークだと思いますか?これが良いデザインであるかどうかはわかりません。Recordingテーブルを破棄して、Trackに外部キーを追加することを考えていました。
参考までに、リレーションシップデザインを示します。