Sql涉及3个表

时间:2014-11-14 20:10:38

标签: sql sql-server

有三个表T1, T2 and T3.

我希望sql查询返回具有以下条件的结果:

T1.Id is in T2.T1Id (T1.Id = T2.T1Id) 

AND there is not a row in T3 with Id from T2 for a certain date in a field in T3

更新

以下示例是第一个表名 - >列名 - >示例数据

enter image description here

输入是日期

如果有TimeIntervalId的Break而不是带有输入日期的DeletedBreak,则返回一行。

如果IntervalId

没有中断,则不返回一行

1 个答案:

答案 0 :(得分:0)

我认为你在寻找的是:

DECLARE @Date datetime = CAST('2014-11-13' as datetime)

SELECT 1 Id
into #TimeIntervals

SELECT 1 Id, 1 TimeIntervalId
INTO #Breaks

SELECT 1 Id, 1 BreakId, CAST('2014-11-14' as datetime) as Date
into #DeletedBreaks

SELECT *
FROM #TimeIntervals ti
INNER JOIN #Breaks b on ti.Id = b.TimeIntervalId
LEFT JOIN #DeletedBreaks db on db.BreakId = b.Id AND Date = @Date
WHERE (db.Id is null)

DROP TABLE #TimeIntervals
DROP TABLE #Breaks
DROP TABLE #DeletedBreaks    

内部很重要,因为它确保如果中断表中没有中断,则不返回任何行。

编辑:b。我将永远不为空,因此它已从where子句中删除。