select * from b where b.id not in (select a.id from a)

解决方案 »

  1.   

    select * from b where 
    b.??id not in (select a.??id from a)
      

  2.   

    select * from B minus select * from A
      

  3.   

            Query_02.Close;
            Query_02.SQL.Clear;
            Query_02.SQL.Add('SELECT *' );
            Query_02.SQL.Add('FROM Query_all');
            Query_02.SQL.Add('Where Query_all.BxNo not in (SELECT Query_01.BxNo FROM Query_01)');
            Query_02.Open;
    ----------
    有问题吗?可是运行报错“Table dose not exist;Invalid object name'Query_All';Invalid object name'Query_01';”
    什么原因?Query_All和Query_01在次之前都open了,没问题。
      

  4.   

    Query_All,Query_01,是TQuery控件呀,应是表名
      

  5.   

    TQuery不行?
    实际是这样:有个产品记录表,以BXNO+DATETIME为键,每个产品(BXNO)会有多条记录(包括合格与不合格的),现在要统计产量及各项合格与不合格的量,所以多条产品记录只能作为一个产品出现,以合格的优先,记入合格量就不能再在某个不合格量中出现。
    怎样统计比较简单?
      

  6.   

    你也太狠了,直接就像从Query中选了?Delphi还没那么聪明。
    急也没用啊,你不公开表结构,谁都帮不了你。
      

  7.   

    表结构很简单:
    CREATE TABLE dbo.TestEnd (
      BeginDateTime datetime,//测试时间
      BxNo varchar(32),      //产品编号
      BxModel varchar(15),   //产品型号
      TestedTime int,        //测试时间
      Data1 image NULL,      //测试数据
    )
    帮帮忙了,多谢了。
      

  8.   

    抱歉,太马虎了。
    CREATE TABLE dbo.TestEnd (
      BeginDateTime datetime,//测试时间
      BxNo varchar(32),      //产品编号
      BxModel varchar(15),  //产品型号
      TestedTime int,        //测试时间
      Data1 image NULL,      //测试数据
      BxResult char(2) NULL, //测试结果(代码:01合格,02、03、04...:各种不合格类型)
    )
      

  9.   

    不合格:
    select BxNo, count(*) from testend where BxResult <> '01'
    合格:
    select BxNo, count(*) from testend where BxResult = '01'
    还有问题吗?
      

  10.   

    每个产品可能会测试多次的(有多条记录有相同的BxNo),但产量统计里只能计为一次。
    count(*)不精确吧
      

  11.   

    select count(distinct(bxno)) from testend
      

  12.   

    还不行,一种bxno有合格的记录也有不合格的记录,以合格的统计优先,记入合格量就不能再在某个不合格量中出现。
      

  13.   

    你难道就不能加Where的比较语句吗?
    select count(distinct(bxno)) from testend where BxResult = '01'
      

  14.   

    我知道用count(distinct(bxno)) 可以正确得到总量和合格量(where BxResult = '01')。现在就是各种不合格的准确量的不到!简单的用
    select count(distinct(bxno)) from testend where BxResult <> '01' 
    得到的结果一定包含部分已经合格的产品,我问题的关键是怎样避免合格产品的重复统计,记入合格量就不能再在某个不合格量中出现。
      

  15.   

    既然总量和合格量都出来了,二者相减不就是不合格量了吗?
    还有为什么<>'01'里面包含合格量?
      

  16.   

    相减只能得到不合格总量,得不到'02'、'03'、'04'...的数量,我需要明细。
    select count(distinct(bxno)) from testend where BxResult <> '01' 
    只是去除了<> '01' 条件下的重复bxno,不会自动滤掉='01'的bxno.能用存储过程实现吗?
      

  17.   

    那么你在变通一下SQL语句就可以了。
    select BxResult, count(distinct(bxno)) from testend where bxresult <> '01' group by bxresult
      

  18.   

    难道存储过程和SQL会有区别?