----------------------------------------------------------------
-- Author  :fredrickhu(小F,向高手学习)
-- Date    :2014-04-08 14:28:04
-- Verstion:
--      Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86) 
-- Jul  9 2008 14:43:34 
-- Copyright (c) 1988-2008 Microsoft Corporation
-- Enterprise Edition on Windows NT 6.1 <X86> (Build 7601: Service Pack 1)
--
----------------------------------------------------------------
--> 测试数据:[vip_lljgwbjmx01]
if object_id('[vip_lljgwbjmx01]') is not null drop table [vip_lljgwbjmx01]
go 
create table [vip_lljgwbjmx01]([traderid] int,[materialid] int,[vipbmclid] int)
insert [vip_lljgwbjmx01]
select 2,1,7 union all
select 2,2,1 union all
select 2,2,7 union all
select 2,3,14
--> 测试数据:[vip_lljgwbjmx02]
if object_id('[vip_lljgwbjmx02]') is not null drop table [vip_lljgwbjmx02]
go 
create table [vip_lljgwbjmx02]([traderid,materialid,vipbmclid] int,[C2] int,[C3] int)
insert [vip_lljgwbjmx02]
select 2,1,7 union all
select 2,2,1 union all
select 2,3,14 union all
select 2,7,13 union all
select 6,3,17
--------------开始查询--------------------------select * from [vip_lljgwbjmx02] WHERE CHECKSUM(*) NOT IN (SELECT CHECKSUM(*) FROM vip_lljgwbjmx01)----------------结果----------------------------
/* traderid,materialid,vipbmclid C2          C3
----------------------------- ----------- -----------
2                             7           13
6                             3           17(2 行受影响)
*/

解决方案 »

  1.   

    谢谢你的帮忙,请问查询结果的能否加入列名traderid,materialid,vipbmclid 
    需要显示列名, select  出来的结果,还是加 left  join  才形成报表
      

  2.   

    select traderid,materialid,vipbmclid from [vip_lljgwbjmx02] WHERE CHECKSUM(*) NOT IN (SELECT CHECKSUM(*) FROM vip_lljgwbjmx01)这个意思吗?
      

  3.   

    是的,但是这样查询会报错
    服务器: 消息 207,级别 16,状态 3,行 1
    列名 'traderid' 无效。
    服务器: 消息 207,级别 16,状态 1,行 1
    列名 'materialid' 无效。
    服务器: 消息 207,级别 16,状态 1,行 1
    列名 'vipbmclid' 无效。
      

  4.   

    select * from [vip_lljgwbjmx02] WHERE CHECKSUM(*) NOT IN (SELECT CHECKSUM(*) FROM vip_lljgwbjmx01)
    这样就报错,指定列名就报错了
      

  5.   

    求查询结果  (需要高效的查询)      需要有列名
    traderid,materialid,vipbmclid
    2       7       13
    6       3       17
      

  6.   

    两个都是视图 试试select
      traderid,materialid,vipbmclid 
    from
      [vip_lljgwbjmx02] as a
    where
     not exists(select 1 from [vip_lljgwbjmx01] where traderid=a.traderid and materialid=a.materialid  and vipbmclid=a.vipbmclid)
      

  7.   

    报错
    服务器: 消息 207,级别 16,状态 3,行 1
    列名 'traderid' 无效。
    服务器: 消息 207,级别 16,状态 1,行 1
    列名 'materialid' 无效。
    服务器: 消息 207,级别 16,状态 1,行 1
    列名 'vipbmclid' 无效。
    服务器: 消息 207,级别 16,状态 1,行 1
    列名 'traderid' 无效。
    服务器: 消息 207,级别 16,状态 1,行 1
    列名 'materialid' 无效。
    服务器: 消息 207,级别 16,状态 1,行 1
    列名 'vipbmclid' 无效。
      

  8.   

    select * from vip_lljgwbjmx01 01
    left join vip_lljgwbjmx02 02 on 02.traderid = 01.traderid
    where 02.traderid is null
      

  9.   


    create table #t
    (
    _id int identity(1,1),
    traderid int,
    materialid int,
    vipbmclid int,
    表id int
    )insert into #t(traderid,materialid,vipbmclid,表id)
    select traderid,materialid,vipbmclid,1 From 视图vip_lljgwbjmx01
    union all
    select traderid,materialid,vipbmclid,2 From 视图vip_lljgwbjmx02select a.traderid,a.materialid,a.vipbmclid 
    from #t a
    join
    (
    select _id  From #t
    group by traderid,materialid,vipbmclid 
    having COUNT(*)=1
    ) b on a._id=b._id
    where 表id =2drop table #t没测试
    自己调下
    看下有没有更快点