SQL问题:关于union和exist(50分)

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

puremoonstone

Unregistered / Unconfirmed
GUEST, unregistred user!
我想从丝类、绸类、其他商品这三个进仓单商品信息中查出未承付的进仓单号(
即从三个进仓单商品信息表中查出进仓单号不在承付单中的记录)。我的SQL语句如下,
select distinct 进仓单号 from (select 进仓单号 from 丝类进仓单商品信息 union
select 进仓单号 from 绸类进仓单商品信息 union
select 进仓单号 from 其他商品进仓单商品信息)
where 进仓单号 not in (select distinct 进仓单号 from 承付单表)
但在SQL SERVER QUERY ANALYZER中调试时出错:
Server: Msg 156, Level 15, State 1, Line 2
Incorrect syntax near the keyword 'where'.
请问错在哪里?该怎么写?
谢谢!

 
你的 丝类、绸类、其他商品里的 进仓单号 还可能重复的阿??

where 进仓单号 not in (select distinct 进仓单号 from 承付单表
这句写前面,写3遍 :)
distinct就不要了阿
 
select 进仓单号 from 丝类进仓单商品信息 WHERE 进仓单号 NOT IN (SELECT 进仓单号 FROM 承付单表)
union
select 进仓单号 from 绸类进仓单商品信息 WHERE 进仓单号 NOT IN (SELECT 进仓单号 FROM 承付单表)
union
select 进仓单号 from 其他商品进仓单商品信息 WHERE 进仓单号 NOT IN (SELECT 进仓单号 FROM 承付单表)


你可以试试,不过好像会重复
 
您的意思是如下所写:
select distinct 进仓单号 from 丝类进仓单商品信息 where 进仓单号 not in
(select distinct 进仓单号 from 承付单表) union select distinct 进仓单号 from
绸类进仓单商品信息 where 进仓单号 not in (select distinct 进仓单号 from
承付单表) union select distinct 进仓单号 from 其他商品进仓单商品信息 where
进仓单号 not in (select distinct 进仓单号 from 承付单表)
我在SQL SERVER
 
您的意思是如下所写:
select distinct 进仓单号 from 丝类进仓单商品信息 where 进仓单号 not in
(select distinct 进仓单号 from 承付单表) union select distinct 进仓单号 from
绸类进仓单商品信息 where 进仓单号 not in (select distinct 进仓单号 from
承付单表) union select distinct 进仓单号 from 其他商品进仓单商品信息 where
进仓单号 not in (select distinct 进仓单号 from 承付单表)
我在SQL SERVER 中调试通过,用到delphi中将它赋给text,
text:='select distinct 进仓单号 from 丝类进仓单商品信息 where 进仓单号 not in (select distinct 进仓单号 from 承付单表) union select distinct 进仓单号 from 绸类进仓单商品信息 where 进仓单号 not in (select distinct 进仓单号 from 承付单表) union select distinct 进仓单号 from 其他商品进仓单商品信息 where 进仓单号 not in (select distinct 进仓单号 from 承付单表)';
因为太长了,系统提示错误。
我就作了如下改动:
Str1:='select distinct 进仓单号 from 丝类进仓单商品信息 where 进仓单号 not in (select distinct 进仓单号 from 承付单表)';
Str2:='select distinct 进仓单号 from 绸类进仓单商品信息 where 进仓单号 not in (select distinct 进仓单号 from 承付单表)';
Str3:='select distinct 进仓单号 from 其他商品进仓单商品信息 where 进仓单号 not in (select distinct 进仓单号 from 承付单表)';
QueryStr:=Str1+Str2+Str3;
text:=QueryStr;
结果只查出Str1中sql所查的记录,请问这是怎么回事呢?
 
我注意到如果写成QueryStr:=Str2+Str1+Str3则查出Str2的,写成Str3+Str1+Str2则查出Str3的
因为QueryStr被定义成String,它也有长度限制,超长的可能被截去了。
我又将QueryStr定义成TStrings,
QueryStr:=TStringlist.Create ;
QueryStr.Add(Str1+Str2+Str3);
再将QueryStr赋给text,可系统提示类型不匹配,该怎么办呢?
这个问题很急,请帮帮忙!谢谢!
 
怎么办?
 
query1.sql.add(str1);
query1.sql.add(str2);
query1.sql.add(str3);
 
好,解决了。谢谢!
 
多人接受答案了。
 

Similar threads

后退
顶部