遇到了一些严重的问题,无法解决如何针对我的情况建立适当的查询。.可以肯定的是,这取决于正确地连接表,但是经过大量的谷歌搜索之后,我似乎无法弄清楚…
我有下表。
Main: ID, WhenDate, InfoText, StatusID, TypeID
和…
Status: ID, StatusText
Secondary: MainID, WhenDate
希望我能够正确解释这一点。.我在Main中有一堆记录,我需要从中获取信息。.我需要能够对WhenDate和TypeID进行过滤。我还需要从链接到StatusID的状态表中获取StatusText。 问题: 次要表链接到Main中的记录,次要中的任何记录都应导致与Main中的记录相同的行,不同之处在于,使用了Secondary中的WhileDate而不是Main中的WhileDate。
任何帮助都将不胜感激,即使只是提示,例如使用什么类型的联接等等。
我使用INNER JOIN状态作为假设每个主记录都引用一个现有的状态记录。如果不是这种情况,您可能需要将其更改为LEFT JOIN。
INNER JOIN
LEFT JOIN
对于WhenDate,您只需离开即可加入Secondary。如果找到一条记录,则可以与Secondary.WhenDate进行比较,否则,可以与Main.WhenDate进行比较。
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 ...