我遇到了两个没有产生预期结果的SQL查询的奇怪情况。以下是查询:
查询1:
SELECT DISTINCT SomeCharValue
FROM Table1
JOIN Table2
ON Table1.SomeCharValue = Table2.SomeCharValue
ORDER BY SomeCharValue
查询2:
SELECT DISTINCT SomeCharValue
FROM Table1
JOIN Table2
ON Table1.SomeCharValue <> Table2.SomeCharValue
ORDER BY SomeCharValue
我有两个包含varchar(15)列的表。表2基本上是表1中值的一小部分,因此Table1具有存储在表2中的所有值。问题是,两个查询永远不会产生相同的结果,但它们确实如此。两个查询都会为某些值产生相同的结果;例如,如果Table1和Table2包含单词'hello',则Query 1应该返回它,而Query 2则不应该返回它。但是,BOTH查询返回'hello'。两个表中的'hello'是否相等且不同时是没有意义的。我运行了一个长度查询来测试值,有些是带有尾随空格的不同大小,但即使将这些更改为精确匹配,并且验证字符的十六进制值是相同的,也会出现相同的结果。我无法比较数字键字段,因为这些表之间没有关键关系。我只能比较列中的确切字符值。有什么想法吗?
答案 0 :(得分:1)
想象一下,您将table1包含a
和b
作为单独的行,而table2具有完全相同的内容。
现在进行第二次查询,将table1的行a
与table2中的两行进行比较。在与table2中的行b
进行比较时,它将传递ON子句,因此a
将在您的结果集中。类似地,table1中的b
行将与表2中的a
行进行比较时传递ON子句。
您可以将查询重写为
SELECT DISTINCT SomeCharValue
FROM TABLE1
WHERE SomeCharValue NOT IN (SELECT DISTINCT SomeCharValue FROM Table2)
ORDER BY SomeCharValue
答案 1 :(得分:0)
您是否尝试使用NOT LIKE而不是&lt;&gt;