当我重复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。
我不确定为什么会有所不同。
答案 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'
实现就足够了