我有一个表TimeIntervals与Breaks的关系依次与DeletedBreaks有关系。
我要做的是接收具有timeIntervals id的al行(Breaks),并且在给定日期没有删除的break。
如果一个break没有删除的中断,DeletedBreaks表中没有一行中断id或者如果有一行中断了id而不是给定的日期,那么应该返回该中断。
以下是行不通的,但你可能会理解我正在做的事情:
SELECT B.*
FROM Breaks B
JOIN TimeIntervals T
ON B.TimeIntervalId = T.Id
JOIN DeletedBreaks DB
ON (
(
DB.BreakId = B.Id
AND DB.DeletedDate <> '2014-10-13'
)
OR DB.BreakId IS NULL
)
AND (T.Id = 2)
答案 0 :(得分:0)
使用LEFT JOIN
到您的DeletedBreaks
表而不是inner join
,因为您不想丢弃Break
个记录,因为DeletedBreaks
ID是空值。
要测试特定日期的NULL DeletedBreaks
或DeletedBreaks
,请在WHERE
子句中执行此操作:
SELECT B.*
FROM Breaks B
JOIN TimeIntervals T
ON B.TimeIntervalId = T.Id
LEFT JOIN DeletedBreaks DB ON
DB.BreakId = B.Id
WHERE
(DB.DeletedDate <> '2014-10-13'
OR DB.BreakId IS NULL)
AND T.Id = 2