SQL Server 查询 出现怪问题
--SQL1
SELECT * FROM ActivityDetails WHERE ActivityDetailsNumber like '105679 '
--SQL2
SELECT * FROM QuestionList WHERE ActivityDetailsNumber like '105679 '
--SQL3
SELECT ActivityDetailsNumber FROM ActivityDetails
WHERE ActivityDetailsNumber not in
(SELECT ActivityDetailsNumber FROM QuestionList)
ActivityDetailsNumber 是表ActivityDetails 的主键,ActivityDetailsNumber是表的外键,想找出ActivityDetailsNumber 在ActivityDetails 存在 但不在QuestionList 里面的值, 在同一个数据库中查询,查出SQL1有一条记录,SQL2没有记录,但是SQL3 却没有记录,请大家帮我看看为什么SQL3查不出数据,谢谢。
------解决方案--------------------in 相当于等号,null 不是0不是空 不能与其它值比较,如果你不加那句话的话,也可用在执行前加上set ansi_nulls off 记得结束后 用set ansi_nulls on 恢复,免得影响其它
------解决方案--------------------刚看到,下午回来看看
------解决方案--------------------wgzaaa() 說得很有道理...我也認為是這個原因...
NULL 值相當於未知, 已知與未知作比較, 結果是未知,
於是 WHERE 條件 就未知, 所以傳回空結果集合.
所以可以加上 SET ANSI_NULLS OFF,
或者
給 WHERE 叢句加上 ActivityDetailsNumber IS NOT NULL
或者
使用 ISNULL() 改寫成
SELECT ActivityDetailsNumber
FROM ActivityDetails
WHERE ActivityDetailsNumber not in
(
SELECT ISNULL(ActivityDetailsNumber, ' ') AS ActivityDetailsNumber
FROM QuestionList
)