我遇到了一些严重的问题,围绕如何为我的情况构建一个正确的查询。很确定这取决于正确加入表格,但我似乎无法通过大量的谷歌搜索来弄明白... < / p>
我有以下表格..
Main:
ID, WhenDate, InfoText, StatusID, TypeID
和...
Status:
ID, StatusText
和...
Secondary:
MainID, WhenDate
希望我能够正确解释这个..
我在Main中有一堆记录,我需要从中获取信息..我需要能够过滤WhenDate和TypeID。我还需要从状态表中获取与StatusID链接的StatusText。
问题:
表辅助链接指向Main中的记录,辅助中的任何记录都应该产生一行与Main中的记录相同,但使用辅助中的WhenDate而不是Main中的WhenDate。
任何帮助都非常感激,即使它只是一个提示,例如使用什么类型的连接或什么......
答案 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 ...