求SQL语句(100分)

  • 主题发起人 主题发起人 shermanxie
  • 开始时间 开始时间
S

shermanxie

Unregistered / Unconfirmed
GUEST, unregistred user!
需要是LOCAL SQL 支持的语句
实现两个或多个数据库作SELECT
在结果集中不仅包含两个数据库中都有的数据
还需要包含只有一个数据库有的数据。
另外请问,UPDATE记录,如果没有找到符合条件的记录,使用LOCAL SQL
如何可以判断。
 
hi shermanxie:
能说的详细点吗?
 
你说的“数据库”是DATABASE还是TABLE,要是DATABASE可就难了。
关于“UPDATE记录,如果没有找到符合条件的记录”的SQL这么写:
update tablename
set updatefield=11
where filterfield=(
select filterfield
from tablename
where ...
group by filterfield
having count(filterfield)<>0)

其中的子查询是用来判断是否有符合条件的数据的。
 
实现两个或多个数据库作SELECT
select ID=job_id from pubs.dbo.jobs
union select ID=ordering from master.dbo.helpsql
UPDATE记录,
if (select ...from ... where ...)<>0
begin
...
end
esle
begin
...
end
 
他的意思我理解为:
1. select * from table1 LEFT OUTER JOIN table2 ON (table1.field = table2.field)
2.先使用select count(*) from table 取得找到记录的个数。后使用update
 
我的问题为:
1.有如下数据库
DBF1
LINK ,A1,A2
01 10 20
02 1 2
DBF2
LINK ,A1,A2
01 20 40
03 5 6
用SQL得出如下结果数据库
DBFRESULT
LINK , A1,A2
01 30 60
02 1 2
03 5 6
2.首先用SELECT 查询有没有记录,那实现时效率太低
用UPDATE 更新数据库时,如何得知本语句执行后,实际更新数据
库记录为多少条。
 
试一下这个:
select link, sum(a1) as a1, sum(a2) as a2 from dbf1
union selectlink, sum(a1) as a1, sum(a2) as a2 from dbf2
group by link
 
看看@@rowcount
 
使用以下的语句:
select link,a.a1+b.a1,a.a2+b.a2 from dbf1 a,dbf2 b where a.link=b.link(先选出相同的进行SUM)
union(并以下的结果)
select link,a1,a2 from dbf1,dbf2 where dbf1.link<>dbf2.link
 
SORRY!正确的语句应如下:
select * from dbf1 minus
select a.link,a.a1,a.a2 from dbf1 a,dbf2 b where a.link(+)=b.link union
select * from dbf2 minus
select b.link,b.a1,b.a2 from dbf1 a,dbf2 b where b.link(+)=a.link union
select a.link,a.a1+b.a1,a.a2+b.a2 from dbf1 a,dbf2 b where a.link=b.link;
我已经试过,完全正确!!!记得给我加分!!!
 
这样可能也可以吧:
select link, sum(a1) as a1, sum(a2) as a2 from (
select link, sum(a1) as a1, sum(a2) as a2 from dbf1 group by link
union select link, sum(a1) as a1, sum(a2) as a2 from dbf2 group by link)

group by link
 
:xxy
还没有测试你的语句,不过请问MINUS是什么意义,我要的是LOCAL SQL语句
:liwei
你的语句有问题吧?至少不是LOCAL SQL
:delphiwolf
如果我不用SQL服务器,那就没有@@rowcount,那该如何呢,我用的本身就
不是用SQL 服务器,能不能通过BDE实现?
 
select link,sum(a1),sum(a2)
from dbf1,dbf2 where dbf1.link=dbf2.link
union
select link,a1,a2
from dbf1 where not exist in select link,a1,a2 from dbf2
union
select link,a1,a2
from dbf2 where not exist in select link,a1,a2 from dbf1
 
这段代码已经测试通过:

select dbf1.link,dbf1.a1 + dbf2.a1 a1,dbf1.a2 + dbf2.a2 a2
from dbf1,dbf2 where dbf1.link=dbf2.link
union
select link,a1,a2
from dbf1 where link not in(select link from dbf2)
union
select link,a1,a2
from dbf2 where link not in(select link from dbf1)
order by link
 
我不知道你在作什么?小型数据库不是Delphi的长处。
如果做小型数据库你不如试试别的工具,如VFP.
 
已经接受第一个问题的答案,请各位解决第二个问题,多谢了
 
update table set field=value, ..... where condition.
 
完全使用 Local SQL 无法处理, 可以这样:

Query.SQL.Add('insert into dbf1 values(''01'', 1, 1)');
try
Query.ExecSQL;
except
Query.SQL.Clear;
Query.SQL.Add('update dbf1 set a1 = 1, a2 = 1 where link = ''01''');
Query.ExecSQL;
end;
 
多人接受答案了。
 
后退
顶部