表TA编号      名称         状态
----------------------------------
1000       1000          0
1001       1001          0
1002       1002          1
1003       1003          1
1004       1004          1
1005       1005          1
表TB
编号      名称         状态
----------------------------------
1000       1000         1
1001       1001         0
1003       1003         0
1005       1005         1查询出表A中有,且状态与表B不相等的记录(表TA中有,表TB中没有的记录也要查出来)
查询出来的结果如下编号      名称      
---------------------
1000       1000      
1002       1002
1003       1003        
1004       1004        

解决方案 »

  1.   

    select 编号, 名称 from TA where not exists (select a.* from TA a ,TB b  where a.编号=b.编号  and a.状态 =b.状态)
      

  2.   

    --> 生成测试数据表: [TA]
    IF OBJECT_ID('[TA]') IS NOT NULL
    DROP TABLE [TA]
    GO
    CREATE TABLE [TA] ([编号] [int],[名称] [int],[状态] [int])
    INSERT INTO [TA]
    SELECT '1000','1000','0' UNION ALL
    SELECT '1001','1001','0' UNION ALL
    SELECT '1002','1002','1' UNION ALL
    SELECT '1003','1003','1' UNION ALL
    SELECT '1004','1004','1' UNION ALL
    SELECT '1005','1005','1'--> 生成测试数据表: [TB]
    IF OBJECT_ID('[TB]') IS NOT NULL
    DROP TABLE [TB]
    GO
    CREATE TABLE [TB] ([编号] [int],[名称] [int],[状态] [int])
    INSERT INTO [TB]
    SELECT '1000','1000','1' UNION ALL
    SELECT '1001','1001','0' UNION ALL
    SELECT '1003','1003','0' UNION ALL
    SELECT '1005','1005','1'
    -->SQL查询如下:
    SELECT * FROM [TA]
    EXCEPT
    SELECT * FROM [TB]
    /*
    编号          名称          状态
    ----------- ----------- -----------
    1000        1000        0
    1002        1002        1
    1003        1003        1
    1004        1004        1(4 行受影响)
    */
      

  3.   

    select * from [TA] a where not exists
    (select 1 from tb where 编号=a.编号 and 状态=a.状态D)
      

  4.   


    select a.* from TA a left join TB b on a.编号=b.编号 
    where b.编号 is null or a.状态<>b.状态 /*
    编号          名称          状态          
    ----------- ----------- ----------- 
    1000        1000        0
    1002        1002        1
    1003        1003        1
    1004        1004        1(所影响的行数为 4 行)
    */
      

  5.   

    -->SQL2K的另一方法:
    SELECT * 
    FROM [TA]
    WHERE CHECKSUM(*) 
    NOT IN (
    SELECT CHECKSUM(*) 
            FROM [TB]
    )
    /*
    编号          名称          状态
    ----------- ----------- -----------
    1000        1000        0
    1002        1002        1
    1003        1003        1
    1004        1004        1(4 行受影响)
    */
      

  6.   

    SELCT
      A.编号,A.名称
    FROM
      表A A
    LEFT OUTER JOIN
      表B B
    ON
      A.编号 = B.编号
    AND
      A.名称 = B.名称
    AND
      A.状态 <> B.状态
      

  7.   

    SELCT
      A.编号,A.名称
    FROM
      [TA] A
    LEFT OUTER JOIN
      [TB] B
    ON
      A.编号 = B.编号
    AND
      A.名称 = B.名称
    AND
      A.状态 <> B.状态
    WHERE
      B.状态 IS NULL
    楼主,掉了一个条件,不好意思。