我怎样才能加入工作条件

时间:2014-10-13 15:36:00

标签: sql

我有一个表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)

1 个答案:

答案 0 :(得分:0)

使用LEFT JOIN到您的DeletedBreaks表而不是inner join,因为您不想丢弃Break个记录,因为DeletedBreaks ID是空值。

要测试特定日期的NULL DeletedBreaksDeletedBreaks,请在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
相关问题