我正在尝试根据以下2种条件从联接的表中检索记录:
Where if(b.enddate is null)
a.starttime >= b.starttime
else
a.starttime >= b.starttime and a.endtime <= b.endtime
我看到了一些使用case的示例,但是结果不是我想要的。请协助我将此条件转换为正确的sql格式。
答案 0 :(得分:5)
您不需要使用WHERE
表达式,可以使用... Where
( b.enddate is null and a.starttime >= b.starttime)
or
( b.enddate is not null and a.starttime >= b.starttime and a.endtime <= b.endtime)
子句中的{{1}}来完成
{{1}}
答案 1 :(得分:3)
我认为我们可以简单地做到这一点,因为在两种情况下a.starttime >= b.starttime
都是适用的,因此在{{1}的情况下,我们只需要处理a.endtime <= b.endtime
条件}是b.enddate
,所以我按如下操作:
NULL or NOT NULL
答案 2 :(得分:2)
为简单起见,您可以尝试以下示例条件逻辑:
DECLARE @enddate datetime2(7);
SET @enddate = NULL;
SELECT @enddate;
IF @enddate IS NULL
SELECT 1, 2 FROM dbo.table_a as a
INNER JOIN dbo.table_b as b ON a.id = b.id
WHERE a.starttime >= b.starttime
ELSE
SELECT 1, 2 FROM dbo.table_a as a
INNER JOIN dbo.table_b as b ON a.id = b.id
WHERE a.starttime >= b.starttime and a.endtime <= b.endtime
这为您提供了2个独立执行计划的好处。因此,如果您决定优化SQL语句,则操作会容易得多(例如建立索引,计划稳定性,移至sp等)。
答案 3 :(得分:1)
那:
WHERE (b.enddate is null AND a.starttime >= b.starttime) OR (b.enddate is not null AND a.starttime >= b.starttime and a.endtime <= b.endtime)
答案 4 :(得分:1)
试试这个先生,
where (b.enddate is null and a.starttime >= b.starttime) OR (a.starttime >= b.starttime and a.endtime <= b.endtime)
谢谢:)