2012-02-23 3 views
1

ここでは多くのことを読んで学んだことがありますが、これまで何も尋ねずに解決された問題はたくさんありますが、これに対処できませんでした。MySQL条件付きJOINで異なるテーブルのキーを使用して一致させる

-programs 
->ProgramID (Primary Unique) 
->ProgramName 
->AuditID 

-audits 
->AuditID (Primary Unique) 
->VenueName 
->Address 

-events 
->EventID (Primary Unique) 
->EventDate 
->ProgramID 
->AuditID 

イベントは、ステージ上でその日のあるこれらのプログラムのインスタンスである:

は、私は3つのテーブルを持っています。 1つのプログラムの複数のインスタンスが実行されている場合は、またはなしが1日に実行される可能性があります。これは基本的に一時的なテーブルで、毎日再投入されます。チケットは、その日にプレイされるプログラムから購入することができます。

監査は、再生が実行される実際の段階です。シアターにはいくつかの段階があります。

プログラムは、レパートリーに長年入っている劇場で演奏されます。実行された最後のステージは、ステージがまだリンクされている実際の日に再生されないプログラムの情報を取得するときに格納されます。

私は今、このクエリを使用しています:

SELECT 
    programs.ProgramID, 
    programs.ProgramName, 
    programs.AuditID, 
    events.EventID, 
    events.EventDate, 
    audits.VenueName, 
    audits.Address 
FROM programs 
LEFT JOIN events 
ON programs.ProgramID = events.ProgramID 
JOIN audits 
ON programs.AuditID = audits.AuditID 
WHERE programs.ProgramID = :ProgramID 
  • をLEFT JOINをそのプログラムのイベントがない場合は、私のプログラムとブランクのイベント情報を残し監査についての情報を提供します。良い。
  • また、イベントが前回再生されたのと同じ監査時には大丈夫です。すばらしいです。
  • 監査テーブルのJOINがnow.AuditIDキーに基づいて行われているため、別の監査で再生されている問題があります。これは廃止されました。

event.AuditIDがnullでない場合、auditsテーブルはprograms.AuditIDの代わりにevents.AuditIDを使用して結合されるため、条件付きJOINが必要です。

ありがとうございます!

答えて

0

私はあなたがこの問題を解決するためにIFNULL(events.AuditID, programs.AuditID)を使用してJOINのことができるようにすべきであると信じて...

SELECT 
    programs.ProgramID, 
    programs.ProgramName, 
    programs.AuditID, 
    events.EventID, 
    events.EventDate, 
    audits.VenueName, 
    audits.Address 
FROM programs 
LEFT JOIN events 
ON programs.ProgramID = events.ProgramID 
JOIN audits 
ON IFNULL(events.AuditID, programs.AuditID) = audits.AuditID 
WHERE programs.ProgramID = :ProgramID 
+0

は、このエラーを与える:SQLSTATE [42000]:構文エラーまたはアクセス違反:への呼び出しで1582誤ったパラメータ数をネイティブ関数 'ISNULL [link](http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_isnull) –

+1

おそらくパラメータが1つだけ必要であると言っています。おそらく 'ISNULL' 'IFNULL'になりたかったのです:http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html#function_ifnull – biziclop

+0

@biziclopありがとうございました...あなたは正しいです。 MySqlとSQL Serverを切り替えることで、私の頭が爆発する... –

関連する問題