SQL查询 - 表连接问题

时间:2013-07-04 18:39:35

标签: sql join

我遇到了一些严重的问题,围绕如何为我的情况构建一个正确的查询。很确定这取决于正确加入表格,但我似乎无法通过大量的谷歌搜索来弄明白... < / p>

我有以下表格..

Main:
ID, WhenDate, InfoText, StatusID, TypeID

和...

Status:
ID, StatusText    

和...

Secondary:
MainID, WhenDate

希望我能够正确解释这个.. 我在Main中有一堆记录,我需要从中获取信息..我需要能够过滤WhenDate和TypeID。我还需要从状态表中获取与StatusID链接的StatusText。
问题:
表辅助链接指向Main中的记录,辅助中的任何记录都应该产生一行与Main中的记录相同,但使用辅助中的WhenDate而不是Main中的WhenDate。

任何帮助都非常感激,即使它只是一个提示,例如使用什么类型的连接或什么......

1 个答案:

答案 0 :(得分: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 ...