产生意外结果的SQL查询

产生意外结果的SQL查询,sql,sql-server-2008-r2,Sql,Sql Server 2008 R2,我遇到了一个奇怪的情况,两个SQL查询没有产生预期的结果。以下是查询: 问题1: 选择不同的值 来自表1 加入表2 在表1.SomeCharValue=表2.SomeCharValue上 按价值排序 问题2: 选择不同的值 来自表1 加入表2 表1.SomeCharValue表2.SomeCharValue 按价值排序 我有两个列为varchar15的表。表2本质上是表1中值的一小部分,因此表1中存储了表2中的所有值。问题是,这两个查询不应该产生相同的结果,但它们确实产生了相同的结果。对于某些值

我遇到了一个奇怪的情况,两个SQL查询没有产生预期的结果。以下是查询:

问题1:

选择不同的值 来自表1 加入表2 在表1.SomeCharValue=表2.SomeCharValue上 按价值排序

问题2:

选择不同的值 来自表1 加入表2 表1.SomeCharValue表2.SomeCharValue 按价值排序


我有两个列为varchar15的表。表2本质上是表1中值的一小部分,因此表1中存储了表2中的所有值。问题是,这两个查询不应该产生相同的结果,但它们确实产生了相同的结果。对于某些值,两个查询将产生相同的结果;例如,如果表1和表2包含单词“hello”,则查询1应返回该单词,而查询2不应返回该单词。但是,两个查询都返回“hello”。两个表中的“hello”同时相等和不相等是没有意义的。我运行了一个长度查询来测试这些值,其中一些值的大小不同,带有尾随空格,但即使将它们更改为完全匹配,并验证字符的十六进制值是否相同,也会出现相同的结果。我无法比较数字键字段,因为这些表之间没有键关系。我只能比较列中的确切字符值。有什么想法吗?

您是否尝试使用“不喜欢”而不是“

设想您的表1包含a和b作为单独的行,而表2的内容完全相同

现在,对于第二个查询,表1的a行将与表2中的两行进行比较。当与表2中的b行进行比较时,它将传递ON子句,因此a将出现在结果集中。与表1中的b行类似,与表2中的a行相比,b行将传递ON子句

您可以将查询重写为

选择不同的值 来自表1 如果SomeCharValue不在表2中,请从表2中选择不同的SomeCharValue
ORDER BY SomeCharValue

在检查这个答案之前,我偶然发现使用了一个嵌套的select语句。这绝对是解决我问题的正确方法。谢谢