我对SQL很新。第一个查询是“正确的”,但我想重写它,以便它不返回任何内容而不是“确定”。查询#2是我的尝试。据我所知,这是正确的,因为JOIN
条件将两个日期不同的所有行分开。但是我不确定这个,因为我说我对此很新。问题是我没有测试数据可以交叉验证。你能帮忙吗?
DECLARE @date1 datetime,
@date2 datetime
SELECT @date1 = Max(date) FROM table1
WHERE 1 = 1
AND id = 1
AND id2 = 11
SELECT @date2 = Max(date) FROM table2
WHERE 1 = 1
AND id = 2
AND id2 = 11
SELECT
CASE
WHEN COALESCE(@date1,0) = @date2
THEN 'Ok'
WHEN CONVERT(TIME,GETDATE()) < '19:00:00'
THEN 'Ok'
ELSE 'Not Ok'
END AS Warning
DECLARE @date1 datetime
,@date2 datetime
,@id int = 1
SELECT @date1 = COALESCE(MAX(date),0) FROM table1
WHERE 1 = 1
AND id = @id
AND id3 = 11
SELECT @date2= MAX(date) FROM table1
WHERE 1 = 1
AND id = @id
AND id2 = 11
SELECT
'Warning' = CASE WHEN CONVERT(TIME,GETDATE()) > '19:00:00'
THEN 'not ok'
END
FROM dbo.table1 AS a
INNER JOIN dbo.table AS a2 ON 1 = 1
AND @date1 != @date2
WHERE 1 = 1
AND a.nBranchId = @id
AND a.nInstrId = 11
答案 0 :(得分:1)
不太相同。在这两个版本中,如果没有满足用于初始化其值的查询条件的行,则@date1
变量将为NULL。
如果是这种情况,那么从版本1开始的最后一次选择将返回一行,其值为&#34; Ok&#34;或者&#34; XP_ResultsOutRightForwards&#34;中缺少前向点,具体取决于当前时间。
然而,版本2不会返回任何行,因为您在inner join
的条件下使用了此变量。不等式不适用于NULL值,因此您将收到一个空集。