2012-03-25 8 views
0

以下に示すように、テーブルRecordingには3つの外部キーが含まれています。私の質問は、どのように私はそのテーブルの外部キーを指定して関連テーブルから名前をプルするだけで、選択したステートメントをAccessでフォーマットできますか?SELECT外部キーを含む3つのフィールドのうち1つのみが入力されているクエリ

私は、外部キーがSELECTの後にヌルされていないチェックする際に働く式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 ... 

しかし、文の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に追加することを考えました。 LEFTは、彼らはすべてのレコードが、左側だけにテーブルを形成返す

SELECT 
    R.idRecording, 
    Nz(A.artName, Nz(B.bName, C.cName)) 
FROM 
    ((Recording R 
    LEFT JOIN Artist A 
     ON R.Artist_idArtist = A.idArtist) 
    LEFT JOIN Band B 
     ON R.Band_idBand = B.idBand) 
    LEFT JOIN Composer C 
     ON R.Composer_idComposer = C.idComposer 

に参加してあなたが問題を解決することができます

ER

答えて

3

:ここでは参考のため

は関係のデザインです結合条件が満たされている右側の表のレコード。

nullの場合は第2引数を返すNz関数を使用してIIfカスケードを簡略化しました。

また、テーブル名に短いエイリアスを使用するため、クエリがさらに簡単になります。

+0

ありがとう、それは完璧に動作します。 – Gybe

関連する問題