急用:一个关于查询的问题(100分)

  • 主题发起人 主题发起人 puremoonstone
  • 开始时间 开始时间
P

puremoonstone

Unregistered / Unconfirmed
GUEST, unregistred user!
急用:一个关于查询的问题:
现在有“丝类产品入库单”、“绸类产品入库单”、“包装材料入库单”、
“其他商品入库单”这四个表,它们的库结构大体一致但不完全相同;此外,
还有一个“承付单商品信息子表”,“进仓单号”是它们共有的字段。现在我想从
四个入库单中查出尚未承付的进仓单号(即该“进仓单号”在入库单中存在,但不在
“承付单商品信息子表”中),四个入库单的进仓单号可能重复,我想用
SQL的EXISTS嵌套,请问该怎么写SQL语句?有没有更好的方法?
 
所有的:
select num from (select num from 丝类产品入库单 union select num from 绸类产品入库单 ...)
where num not in (select num from 承付单商品信息子表)
一个个的查:
select num form 丝类产品入库单
where num not (select num from 承付单商品信息子表)
 
我根据您的提示写了如下的程序:
with adoquery1 do
begin
with sql do
begin
close;
clear;
text:='select 进仓单号 from (select 进仓单号 from 丝类产品入库单 union select 进仓单号 from 绸类产品入库单) where 进仓单号 not in (select 进仓单号 from 承付单商品信息子表)';
end;
open;
end;
系统提示语法错误,请问错在哪里?
 
编译错还是执行错?
 
执行出错。
 
把text:='select 进仓单号 from (select 进仓单号 from 丝类产品入库单 union select 进仓单号 from 绸类产品入库单) where 进仓单号 not in (select 进仓单号 from 承付单商品信息子表)';
改成:text:='select 进仓单号 from
(select 进仓单号 from 丝类产品入库单 union select 进仓单号 from 绸类产品入库单) a
where a.进仓单号 not in (select 进仓单号 from 承付单商品信息子表)';
我在sql server 下试了,用英文字段,英文表名是对的,祝你好运.
另:我现在要去吃饭了,你的另一个问题等下再说.
 
请问“a”的作用是什么?查询出来的结果不对,是空的。
 
A 只是一个别名,方便写而已
如果你用SQL SERVER先在QUERY ANALYZER里面调试SQL语句通过
再放在程序里面。这样如果在出错,就更有针对性一点。
 
还是不对。
 
with adoquery1 do
begin
Close; //应写在这
with sql do
begin
// close; 写在这里一定错
clear;
text:='select 进仓单号 from (select 进仓单号 from 丝类产品入库单 union select 进仓单号 from 绸类产品入库单) where 进仓单号 not in (select 进仓单号 from 承付单商品信息子表)';
end;
open;
end;
 
我刚试了一下:
with adoquery2 do
begin
with sql do
begin
close;
clear;
text:='select * from 丝类产品入库单'
end;
open;
end;

with adoquery2 do
begin
close;
with sql do
begin
clear;
text:='select * from 丝类产品入库单'
end;
open;
end;
都可以,都能正确查询。
现在的问题是adoquery1的查询结果为空,这是怎么回事?
 
如果你的进厂单号中有某些记录存在空值(null),有可能出现你的结果,可以where条
件中加入: 'and not (进仓单号 is null) ',不知道你的进仓单号是不是键值,是不是存在空值
 
问题解决了,确实是因为有空值。
因为网络出了问题,所以一直没给分。谢谢大家的热心帮助!
特别感谢:sonie!谢谢!
 
多人接受答案了。
 
后退
顶部