从我的SQL语句获取奇怪的结果

时间:2019-04-10 02:19:49

标签: sql-server where

当我重复WHERE语句时(错误地),我得到了不同的结果。

今天,我试图查看系统中出现了几次错误。当我错误地重复相同的WHERE语句时,我得到了奇怪的结果。我首先搜索错误代码635,并获得140个返回值。因此,我尝试搜索两个不同的错误代码,但是将有问题的第二个代码错误键入与第一个WHERE语句中相同的数字635,然后返回1058行。

我很好奇为什么只有一次WHERE语句时1058行没有返回。我什至进行了实验,并重复了三次WHERE语句(共四次),但是返回的行数保持恒定为1058。

我首先运行它并返回了140行...

SELECT *
FROM ErrTbl
WHERE status = 'unresolved'
AND ErrCd = '635'

那我想运行这个...

SELECT *
FROM ErrTbl
WHERE status = 'unresolved'
AND ErrCd = '635'
OR ErrCd = '735'

但是我不小心运行了它,并返回了1058行...

SELECT *
FROM ErrTbl
WHERE status = 'unresolved'
AND ErrCd = '635'
OR ErrCd = '635'

如果我不小心重复了相同的WHERE语句,我希望返回的行是相同的,在这种情况下为140。实际上,查看返回值,每种情况下应该为1058。

我不确定为什么会有所不同。

4 个答案:

答案 0 :(得分:0)

这取决于ErrTbl的加载方式,当您第一次运行以下查询并获得140行时,可能会加载表。

SELECT * FROM ErrTbl WHERE ErrCd = '635'

接下来,当我们运行以下查询时,您将获得1058行,因为加载完成后表中的数据可能已更改,因此此后结果也没有变化。

SELECT * FROM ErrTbl WHERE ErrCd = '635' AND ErrCd = '635'

答案 1 :(得分:0)

不要认为您的查询有问题。

发生计数冲突时,请在查询中加上选择计数(*),以获取准确的计数。有时IDE设置会截断输出或基表更改

select count(*) from ( original query ) as q

答案 2 :(得分:0)

所以我知道了。我忽略了关于状态的其他WHERE声明。我认为这对这次讨论不重要,但我错了。我调整了原始问题中的代码。

该查询似乎首先返回140行,其中错误代码为635,并且状态未按预期解决。

当我添加最后一条'OR ErrCd ='635'行时,OR覆盖了前两个WHERE条件(状态='未解决'AND ErrCd ='635')。因此,它返回了1058行,全都是错误代码635,但同时包含已解决和未解决的状态。

只需发布并提问即可帮助我进行思考。

答案 3 :(得分:0)

执行

时,您运行了不同的select,因此获得了不同的结果
SELECT *
FROM ErrTbl
WHERE status = 'unresolved'
AND ErrCd = '635'

你们两个人的条件都必须为

但是当您运行

SELECT *
FROM ErrTbl
WHERE status = 'unresolved'
AND ErrCd = '635'
Or ErrCd = '635'

如果ErrCd = '635'实现就足够了