当尝试通过select语句来计算没有指定varchar值的行数时,我遇到了一个奇怪的情况。好吧,听起来甚至对我自己来说也很困惑,所以让我给你举个例子:
Let s say I have a field "MyField" in "SomeTable" and I want to count in how many rows MyField values do not belong to a domain defined by the values of "MyOtherField" in "SomeOtherTable". In other words, suppose that I have MyOtherField = {1, 2, 3}, I wanna count in how many rows MyField value are not 1, 2 or 3. For that, I d use the following query:
SELECT COUNT(*) FROM SomeTable
WHERE ([MyField] NOT IN (SELECT MyOtherField FROM SomeOtherTable))
而且它工作得非常好。请注意,MyField和MyOtherField是int类型的。如果我尝试运行完全相同的查询,除了varchar类型的字段之外,它返回的值为0,即使我知道有错误的值,我也把它们放在那里!如果我试图计算相反的(域中有多少行与我要求的相反,即有多少行不是),只需在上面的查询中压制“NOT”子句...那么,那篇文章! ¬¬
是的,肯定有许多解决办法,但我想知道为什么它不能像应该的那样工作。此外,我不能简单地改变整个查询,因为大部分都是在C#代码中构建的,基本上我能够自由更改的仅是对应于域的select语句(在NOT IN子句中发生的任何事情都不会对其他软件的任何其他部分产生影响)。我希望我表达清楚,希望有人能帮助我。
提前致谢。