日期:2014-05-19  浏览次数:20655 次

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
)