1.查出来736条记录SELECT COUNT(*) AS Expr1
FROM dbo.linefile
WHERE (xmgcbh NOT LIKE '%gx%') AND (LEN(sbh) < 9)
2.查出来478条记录
SELECT COUNT(*) AS Expr1
FROM dbo.linefile
WHERE (xmgcbh NOT LIKE '%gx%') AND (LEN(sbh) < 9)AND (sbh IN
          (SELECT yh_sbh
         FROM gw_yh)) 
3.查出来0条记录,原因在哪?
SELECT COUNT(*) AS Expr1
FROM dbo.linefile
WHERE (xmgcbh NOT LIKE '%gx%') AND (LEN(sbh) < 9)AND (sbh not IN
          (SELECT yh_sbh
         FROM gw_yh)) 

解决方案 »

  1.   


    --楼主看看这个, 。
    --1. NULL 对 IN(NOT IN) 查询的影响
    --测试数据
    DECLARE @1 TABLE(col1 int)
    INSERT @1 SELECT 1
    UNION ALL SELECT NULL
    UNION ALL SELECT 2DECLARE @2 TABLE(col1 int)
    INSERT @2 SELECT 1--查询
    SELECT [@1总记录数]=COUNT(*) FROM @1
    --结果: 3SELECT [@1在@2表中存在的记录数]=COUNT(*) FROM @1 a
    WHERE col1 IN(SELECT col1 FROM @2)
    --结果: 1SELECT [@1在@2表中存在的记录数]=COUNT(*) FROM @1 a
    WHERE col1 NOT IN(SELECT col1 FROM @2)
    --结果: 1--在@2中插入一条NULL值
    INSERT @2 SELECT NULL
    SELECT [@1在@2表中存在的记录数]=COUNT(*) FROM @1 a
    WHERE col1 IN(SELECT col1 FROM @2)
    --结果: 1SELECT [@1在@2表中存在的记录数]=COUNT(*) FROM @1 a
    WHERE col1 NOT IN(SELECT col1 FROM @2)
    --结果: 0
    GO
      

  2.   

    应该是NULL的问题.望楼主检查.
      

  3.   

    NULL的問題  SQL Server2000/2005 遵從SQL-92的規定: 對空值進行等於或不等於操作時返回為false
    set ANSI_NULLS為false時  就不遵從SQL-92的規定  可以對空值進行比較操作
      

  4.   

    楼主的问题设置
    set ANSI_NULLS off后就解决了吧!
      

  5.   


    任何值跟null比较都是为null 
      

  6.   


    SET ANSI_NULLS Off可以解决你的问题!
      

  7.   


    这第三句的结果就是1-2的结果吧,你还来句sql去算?
      

  8.   

    应当是null值的原因,你可以把1、2、的查询结果放到EXCEL对比下就知道什么原因了