两个表有部分数据完全相同、有部分不相同如下,我想把A表中的B表中不同的数据查询出来,A表
字段A1
a
b
c
d
e
f
gB表
字段B1
a
c
f
g即查询输出
b
d
e请问这个SQL语句如何写?
十分感谢!

解决方案 »

  1.   

    两个表应该有关系吧。直接查询啊
        select a.b,a.d,a.e from a,b where a.id=b.id
      

  2.   


    --方法1:
    select A1 from A where not exist(select B1 from B)B1 from B)-- 方法2
    select * from where A1 not in (select B1 from B)
      

  3.   

    --方法1:
    select A1 from A where not exist(select B1 from B)-- 方法2
    select * from where A1 not in (select B1 from B)
      

  4.   

    提示:关键字 'where' 附近有语法错误
      

  5.   

    SELECT  A.A1
    FROM    A
    WHERE   NOT EXISTS ( SELECT b1
                         FROM   b
                         WHERE  a.A1 = B.B1 )
      

  6.   


    后边的使用 select * 就可以了。SQL Server遇见select *时并不需要去取出任何一个字段。对于exists子查询,使用Select *要比这里使用 select [字段]快多了。另外虽然sql server可以自动优化,我觉得吧B.B1写在前边更清晰,说明你希望当A.A1有索引时可以利用到。
      

  7.   

    最简单 写法 
    select * from A
    except
    selct * from B
      

  8.   

    楼主可以去 搜下 SQL except 用法 ,和 union 还是 比较 像的 这个是求的 减法.
      

  9.   

    select * from A where A1 not exist(select B1 from B)select * from A where A1 not in (select B1 from B)
      

  10.   

    select A.* from A left join B where A.A1<>B.B1
      

  11.   

    这个方法在(B表存在,而A表不存记录)情况下查不出来。
    正确方法应该是
    select * from A
    INTERSECT 
    select * from B
      

  12.   

    因为B表中的字段在A表中都存在,所以 楼主可以这样写:select A1 from A where A1 not in(select B1 from B)这样比较容易理解。可以试试
      

  13.   

    CREATE TABLE tb1(id int,val nvarchar (200))
    INSERT tb1 SELECT 1,'a'
    UNION ALL SELECT 2,'b'
    UNION ALL SELECT 3,'c'
    UNION ALL SELECT 4,'d'
    UNION ALL SELECT 5,'e'
    UNION ALL SELECT 6,'f'
    UNION ALL SELECT 7,'g'
    CREATE TABLE tb2(id int,val nvarchar (200))
    INSERT tb2 SELECT 1,'a'
    UNION ALL SELECT 3,'e'
    UNION ALL SELECT 4,'f'
    UNION ALL SELECT 7,'g'
    SELECT * FROM tb1 WHERE NOT EXISTS(SELECT 1 FROM tb2 WHERE tb1.val=tb2.val)
    /*
    val
    b
    c
    d
    */
    --EXCEPT,必须所有列完全一样
    SELECT * FROM tb1 EXCEPT 
    SELECT * FROM tb2
    /*
    id val
    2 b
    3 c
    4 d
    5 e
    6 f
    */--INTERSECT 
    SELECT * FROM tb1 INTERSECT 
    SELECT * FROM tb2
    /*
    id val
    1 a
    7 g
    */
    --分别先量表中插入相同的列
    INSERT INTO tb1 VALUES(1,'a')
    INSERT INTO tb2 VALUES(1,'a')
    INSERT INTO tb1 VALUES(7,'g')
    INSERT INTO tb2 VALUES(7,'g')
    --执行查询
    SELECT * FROM tb1 INTERSECT 
    SELECT * FROM tb2
    /*
    --结果不变
    --即INTERSECT的查询结果为 左右两边的两个查询均返回的所有值 并消除重复行
    --返回 INTERSECT 操作数左右两边的两个查询均返回的所有非重复值。(帮助文档原话)
    id val
    1 a
    7 g
    */
      

  14.   

    select * from (
    select * from A表 left join B表 on A表.A1=B表.B1 ) T
    where T.B1 is null