当我重复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。
我不确定为什么会有区别。
这取决于ErrTbl的加载方式,当您第一次运行以下查询并获得140行时,可能会发生表格加载。
SELECT * FROM ErrTbl WHERE ErrCd = '635'
接下来,当我们运行以下查询时,您有1058行,因为在加载完成后数据可能已在表中更改,因此结果之后没有差异。
SELECT * FROM ErrTbl WHERE ErrCd = '635' AND ErrCd = '635'
不要认为您的查询存在问题。
当您有计数冲突时,使用选择计数(*)包装您的查询以获得准确的计数。有时IDE设置会截断输出或基表更改
select count(*) from ( original query ) as q
所以我明白了。我遗漏了我有一个额外的WHERE语句的状态。我不认为这次讨论很重要,但我错了。我调整了原始问题中的代码。
看来查询首先返回140行,其中错误代码为635,状态未按预期解析。
当我添加最后一个'OR ErrCd ='635'行时,OR覆盖前两个WHERE条件(status ='unresolved'AND ErrCd ='635')。因此,它返回了1058行,这些行都是错误代码635但包含已解析和未解析的状态。
只是张贴并提出问题,这让我想到了这一点。
你得到了不同的结果,因为你执行时运行了不同的选择
SELECT *
FROM ErrTbl
WHERE status = 'unresolved'
AND ErrCd = '635'
你们两个条件都必须如此
但是当你跑步的时候
SELECT *
FROM ErrTbl
WHERE status = 'unresolved'
AND ErrCd = '635'
Or ErrCd = '635'
如果ErrCd = '635'
成真就足够了