admin

SQL查询-表联接问题

sql

我遇到了一些严重的问题,无法解决如何针对我的情况建立适当的查询。

我有下表。

Main:
ID, WhenDate, InfoText, StatusID, TypeID

和…

Status:
ID, StatusText

和…

Secondary:
MainID, WhenDate

希望我能够正确解释这一点。.我在Main中有一堆记录,我需要从中获取信息。.我需要能够对WhenDate和TypeID进行过滤。我还需要从链接到StatusID的状态表中获取StatusText。
问题:
次要表链接到Main中的记录,次要中的任何记录都将导致与Main中的记录相同的行,不同之处在于,使用了Secondary中的WhenDate而不是Main中的WhenDate。

任何帮助都将不胜感激,即使只是一个提示,例如使用什么类型的联接等等。


阅读 161

收藏
2021-06-07

共1个答案

admin

我使用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 ...
2021-06-07