本人用的是access数据库,用Delphi来实现下列功能,希望完成库存查询,包括如下情况: 
进货表的货没有损耗没有出库 
进货表的货有出库没有损耗 
进货表的货没有有出库有损耗 
进货表的货有出库有损耗 现有三张表,分别是进货表entertable、出库表outtable、损耗表brokentable 本人在Delphi中的编写的如下: 
try 
query1.Close; 
query1.sql.Clear; 
query1.SQL.Add('select name,(entertable.quantity-outtable.quantity-brokentable.quantity) from entertable,outtable,brokentable'); 
query1.SQL.Add('where entertable.name=outtable.name and outtable.name=brokentable.name'); 
query1.SQL.Add('union select name,(entertable.quantity-outtable.quantity) from entertable,outtable,brokentable'); 
query1.SQL.Add('where entertable.name!=brokentable.name and entertable.name=outtable.name'); 
query1.SQL.Add('union select name,(entertable.quantity-brokentable.quantity) from entertable,outtable,brokentable'); 
query1.SQL.Add('where entertable.name!=outtable.name and entertable.name=brokentable.name'); 
query1.SQL.Add('union select name,entertable.quantity from entertable,outtable,brokentable'); 
query1.SQL.Add('where entertable.name!=outtable.name and entertable.name!=brokentable.name;'); 
query1.Open; 
except 
on edatabaseerror do query1.ExecSQL 
end; 按下确定后出现数据重复,不知道错在哪里 
问题相当大!望高手赐教,不胜感激!!!! 问题补充: 
entertable name  class quantity price enterdate 
  1        芹菜    蔬菜    18      3元  08-11-10 
  2        高脚杯  用品    17      4元  08-12-10 
outtable name class quantity price enterdate brokentable name class quantity price enterdate 
大致明细如上

解决方案 »

  1.   

    这个问题最好在ACCESS版询问,就是SQL语句问题,
    贴记录及要求结果出来看看
      

  2.   

    这个问题最好在SQL SERVER/ORACLE/ACCESS版询问,就是SQL语句问题, 
    贴记录及要求结果出来看看
      

  3.   

    在ACCESS版贴了2天都没有人睬我的。结果是运行出来出现重复,一直得不到解决
      

  4.   

    你可以先到查询分析器里面调试下看看sql语句哪边有问题
      

  5.   

    不知道ACCESS里有没有DISTINCT
    ,如果有你在你的SQL语句外在嵌套一层,例如:SELECT DISTINCT 你的字段名
    FROM
    (你一开始的那个数据集)
      

  6.   

    你这里用到union了,可以分成几个部分查查看看每个SQL的数据
      

  7.   

    SQL语句问题.不知道你的数据库版本和型号.这个需要你公布出来的.有的是支持数据集再查询的.有的是不支持的.你不说鬼晓得.这个也不是DELPHI问题.是SQL问题.
      

  8.   

    另外access是支持数据再查询的.select distinct * from
    (查询1
    UNION 
    查询2
    );
    这样就可以去除重复数据了
      

  9.   

    试了一下,说'General SQL error.
    [Microsoft][ODBC Microsoft Access Driver]语法错误(操作符丢失)在查询表达式'entertable.name!=brokentable.name and entertable.name=outtable.name '中.'
      

  10.   

    我查过了,ACCESS是有DISTINCT的~你GOOGLE一下它的用法,因该能把你的问题解决!
      

  11.   

    我做到现在发现我的各个控件可能设置也有问题了,我们小组是用ACCESS做的,但是我们组长在设置试用的控件是TQUERY控件连接了DBGRID和DATEBASE控件,我在网上看到要连接的是ADOCONNECTION控件,我现在一团混乱
      

  12.   

    try
    query1.Close;
    query1.sql.Clear;
    query1.SQL.Add('select DISTINCT  name,(entertable.quantity-outtable.quantity-brokentable.quantity) from entertable,outtable,brokentable');
    query1.SQL.Add('where entertable.name=outtable.name and outtable.name=brokentable.name');
    query1.SQL.Add('union select name,(entertable.quantity-outtable.quantity) from entertable,outtable,brokentable');
    query1.SQL.Add('where entertable.name!=brokentable.name and entertable.name=outtable.name');
    query1.SQL.Add('union select name,(entertable.quantity-brokentable.quantity) from entertable,outtable,brokentable');
    query1.SQL.Add('where entertable.name!=outtable.name and entertable.name=brokentable.name');
    query1.SQL.Add('union select name,entertable.quantity from entertable,outtable,brokentable');
    query1.SQL.Add('where entertable.name!=outtable.name and entertable.name!=brokentable.name;');
    query1.Open;
    except
    on edatabaseerror do query1.ExecS加上红色部分就可以去掉重复数据adoconnection控件连接数据和query没什么关系,用query的话是通过BDE引擎,需要建立ODBC,用Adoconnection的话是通过ADO连接,在代码上基本上一样的,只是连接数据库的方式不同.