2

私の状況に適したクエリを作成する方法について頭を悩ませている深刻な問題がいくつかあります..テーブルを適切に結合することに依存していることは確かですが、多くのグーグルの後でそれを理解することはできません...

私は次のテーブルを持っています..

Main:
ID, WhenDate, InfoText, StatusID, TypeID

と...

Status:
ID, StatusText    

と...

Secondary:
MainID, WhenDate

これを正しく説明できることを願っています..メインに情報を取得する必要があるレコードがたくさんあります..WhenDateとTypeIDでフィルタリングできるようにする必要があります。また、StatusID にリンクされている Status テーブルから StatusText を取得する必要があります。
問題:
セカンダリ テーブルはメインのレコードにリンクします。セカンダリのレコードは、メインの WhenDate の代わりにセカンダリの WhenDate が使用されることを除いて、メインのレコードと同じ行になります。

使用する結合の種類など、単なるヒントであっても、どんな助けでも大歓迎です...

4

1 に答える 1

1

INNER JOINすべてのメイン レコードが既存のステータス レコードを参照すると仮定して、ステータスに使用しました。そうでない場合は、に変更することをお勧めしますLEFT JOIN

WhenDate については、Secondary に参加したままにすることができます。レコードが見つかった場合は、Secondary.WhenDate と比較できます。そうでない場合は、Main.WhenDate と照合します。

SELECT
  m.ID as MainID,
  m.WhenDate as MainWhenDate, 
  m.InfoText, 
  m.StatusID,
  st.StatusText,
  m.TypeID,
  s.WhenDate as SecondaryWhenDate,
  CASE WHEN s.MainID IS NULL THEN 
    m.WhenDate 
  ELSE 
    s.WhenDate 
  END AS ActualWhenDate
FROM
  Main m
  INNER JOIN Status st ON st.ID = m.StatusID
  LEFT JOIN Secondary s ON s.MainID = m.ID
WHERE
  ( s.MainID IS NULL AND m.WhenDate = <YourDate>
    OR
    s.MainID IS NOT NULL AND s.WhenDate = <YourDate> )
  AND TypeId = <TypeFilter>
  AND ... other filters, if you need any ...
于 2013-07-04T18:50:25.270 に答える