楼主: zhrmghg

[精华] 一个UPDATE语句,请教SQL编写高手

[复制链接]
论坛徽章:
0
41#
发表于 2005-6-27 15:47 | 只看该作者

三个表扎个办

已知:

a (id,status) id 是primary key
b(id,item,num,price)   其中 id ,item 是组合primary key
c (item,num,price)  item 是 primary key
变量
@var1

现在要将 b.id = @var1 and
  b.item = c.item  and
   a.status = 'N'
的 b.num  加到 c.num


还有
  要将 b.id = @var1 and
  b.item = c.item  and
   a.status = 'N'

  的b.price 加权平均到 c.price

再 set a.status  = 'Y'

怎么办啊 三个表!! 太复杂了

使用道具 举报

回复
论坛徽章:
44
青年奥林匹克运动会-自行车
日期:2014-09-12 22:37:432012新春纪念徽章
日期:2012-02-13 15:12:092012新春纪念徽章
日期:2012-02-13 15:12:09咸鸭蛋
日期:2012-01-08 14:47:322012新春纪念徽章
日期:2012-01-04 11:50:44ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15迷宫蛋
日期:2011-08-14 17:30:33双黄蛋
日期:2011-05-28 20:32:46紫蛋头
日期:2011-05-18 20:41:51现任管理团队成员
日期:2011-05-07 01:45:08
42#
发表于 2005-9-19 11:04 | 只看该作者

好贴

真是差之毫厘,谬之千里啊!

使用道具 举报

回复
论坛徽章:
2
授权会员
日期:2006-01-10 08:59:592011新春纪念徽章
日期:2011-02-18 11:43:35
43#
发表于 2005-10-27 20:04 | 只看该作者
正烦着,多谢指教。我也试了,OK的。

最初由 pfox 发布
[B]


我这样写就可以解决问题,我试了,数据正确。

UPDATE B
SET COL3=(
SELECT COL3
FROM A
WHERE B.COL1=A.COL1
AND B.COL2=A.COL2)
WHERE B.COL1||B.COL2 IN (
SELECT A.COL1||A.COL2
FROM A
WHERE A.COL1=B.COL1
AND A.COL2=B.COL2); [/B]

使用道具 举报

回复
论坛徽章:
0
44#
发表于 2006-1-4 16:02 | 只看该作者
"update b
set col3 = (select col3 from a
where a.col1=b.col1 and a.col2=b.col2)
我覺得上面這句是理所當然一句,為何你們想得如此复杂"是不行的,必须在后面加上where条件

使用道具 举报

回复
论坛徽章:
0
45#
发表于 2006-3-7 08:43 | 只看该作者
最初由 meteor2100 发布
[B]update b
set col3 = (select col3 from a
                 where a.col1=b.col1 and a.col2=b.col2)

或:
declare
   v_col1 a.col1%type;
   v_col2 a.col2%type;
   v_col3 a.col3%type;
   cursor cur_up is
       select col1,col2,col3 from a;
begin
   open cur_up;
   loop
   fetch cur_up into v_col1,v_col2,v_col3;
   exit when cur_up%notfound;
   update b set col3=v_col3
        where col1=v_col1 and col2=v_col2;
  end loop;
  close cur_up;
  commit;
end;

如果还是不行,我想我只能手工一行一行的update了。 [/B]



樓上的兄弟牛,這樣的查詢還可以用游標來,挺牛的
不知道這樣可不可以:
這樣不知道可以不:
UPDATE B SET COL3=(SELECT B.COL3 FROM A INNER JOIN B ON B.COL1=A.COL1 AND B.COL2=A.COL2)

使用道具 举报

回复
论坛徽章:
5
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44
46#
发表于 2006-3-7 09:03 | 只看该作者
UPUP

使用道具 举报

回复
论坛徽章:
0
47#
发表于 2006-4-19 15:46 | 只看该作者
oracle 肯定是不认识这个表了,因为是在子查询外的了,根本就是没有查询到b这个表的

使用道具 举报

回复
论坛徽章:
0
48#
发表于 2006-4-19 16:02 | 只看该作者
个人认为你第一个应该把表A或表B的col1、col2两列的数据取出来放到游标里面,然后作为update的where条件,然后用个for语句update

使用道具 举报

回复
论坛徽章:
4
ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:442010新春纪念徽章
日期:2010-03-01 11:19:502011新春纪念徽章
日期:2011-02-18 11:43:362012新春纪念徽章
日期:2012-01-04 11:53:29
49#
发表于 2007-7-4 18:42 | 只看该作者
ORACLE 怎么不支持如下的SQL更新语句:有些晕

update a
set col1=b.col1
from table1 a
inner join table2 b
on a.id=b.id
但是在sql server里是支持的。。我感觉这语句好好用

使用道具 举报

回复
论坛徽章:
50
2014年世界杯参赛球队: 荷兰
日期:2014-07-11 07:56:59蛋疼蛋
日期:2012-03-06 07:22:542012新春纪念徽章
日期:2012-02-13 15:09:522012新春纪念徽章
日期:2012-02-13 15:09:522012新春纪念徽章
日期:2012-02-13 15:09:522012新春纪念徽章
日期:2012-02-13 15:09:522012新春纪念徽章
日期:2012-02-13 15:09:522012新春纪念徽章
日期:2012-01-04 11:53:29蛋疼蛋
日期:2011-11-11 15:47:00ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26
50#
发表于 2007-7-5 08:25 | 只看该作者
我看的有点蒙,是否搞的如此复杂,就是因为两表的记录如果不能一一对应就会查询不准确,所以要加上WHERE B.COL1||B.COL2 IN (
SELECT A.COL1||A.COL2
FROM A
WHERE A.COL1=B.COL1
AND A.COL2=B.COL2);  之类的限制一下

否则
UPDATE B
SET COL3=(
SELECT COL3
FROM A
WHERE B.COL1=A.COL1
AND B.COL2=A.COL2)
不是最简单了吗???

但是

declare
v_col1 a.col1%type;
v_col2 a.col2%type;
v_col3 a.col3%type;
cursor cur_up is
select col1,col2,col3 from a;
begin
open cur_up;
loop
fetch cur_up into v_col1,v_col2,v_col3;
exit when cur_up%notfound;
update b set col3=v_col3
where col1=v_col1 and col2=v_col2;
end loop;
close cur_up;
commit;
end;
这个能解决两表不一一对应的NULL问题吗???

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表