2

我遇到了一些严重的问题,围绕着如何为我的情况建立一个适当的查询。很确定这取决于正确地加入表格,但经过大量谷歌搜索后我似乎无法弄清楚......

我有以下表格..

Main:
ID, WhenDate, InfoText, StatusID, TypeID

和...

Status:
ID, StatusText    

和...

Secondary:
MainID, WhenDate

希望我能够正确解释这一点。我在 Main 中有一堆记录,我需要从中获取信息。我需要能够过滤 WhenDate 和 TypeID。我还需要从与 StatusID 链接的状态表中获取 StatusText。
问题:
Secondary 表链接到 Main 中的记录,Secondary 中的任何记录都应生成与 Main 中的记录相同的行,但使用 Secondary 中的 WhenDate 而不是 Main 中的 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 回答