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

问题描述 投票:0回答:4

当我重复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。

我不确定为什么会有区别。

sql-server where
4个回答
0
投票

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

SELECT * FROM ErrTbl WHERE ErrCd = '635'

接下来,当我们运行以下查询时,您有1058行,因为在加载完成后数据可能已在表中更改,因此结果之后没有差异。

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

0
投票

不要认为您的查询存在问题。

当您有计数冲突时,使用选择计数(*)包装您的查询以获得准确的计数。有时IDE设置会截断输出或基表更改

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

0
投票

所以我明白了。我遗漏了我有一个额外的WHERE语句的状态。我不认为这次讨论很重要,但我错了。我调整了原始问题中的代码。

看来查询首先返回140行,其中错误代码为635,状态未按预期解析。

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

只是张贴并提出问题,这让我想到了这一点。


0
投票

你得到了不同的结果,因为你执行时运行了不同的选择

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

你们两个条件都必须如此

但是当你跑步的时候

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

如果ErrCd = '635'成真就足够了

© www.soinside.com 2019 - 2024. All rights reserved.