楼主: zhrmghg

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

[复制链接]
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
21#
发表于 2002-6-29 13:06 | 只看该作者

有时我用这种方法

update ( select a.col3 a_col3, b.col3 b_col3 from a, b where a.col1=b.col1 and a.col2= b.col2)
set b_col3 = a_col3

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
22#
发表于 2002-7-2 09:19 | 只看该作者
我个人觉得这种update应有规则,比如
a 表:
col1        col2             col3
1             2                   3
1             2                    4
1             2                    5
B表:
col1        col2             col3
1             2                  
1             2                  
这种情况需要规则的,否则update后的数据不一定是想要。

使用道具 举报

回复
论坛徽章:
0
23#
发表于 2002-7-2 13:28 | 只看该作者
最初由 kanmi 发布
[B]我个人觉得这种update应有规则,比如
a 表:
col1        col2             col3
1             2                   3
1             2                    4
1             2                    5
B表:
col1        col2             col3
1             2                  
1             2                  
这种情况需要规则的,否则update后的数据不一定是想要。 [/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);

使用道具 举报

回复
论坛徽章:
0
24#
发表于 2002-10-23 14:26 | 只看该作者
update b
set col3 = (select a.col3 from a
where a.col1=b.col1 and a.col2=b.col2)
where (b.col1,b.col2) in (select col1,col2 from a);

最后的那个where子句是一定要的。

使用道具 举报

回复
论坛徽章:
0
25#
发表于 2003-5-8 10:43 | 只看该作者
试试这个,应该没问题:
update b
set col3 = (select col3 from a
where a.col1=b.col1 and a.col2=b.col2)
where (col1,col2) in
(select col1,col2 from a )

使用道具 举报

回复
论坛徽章:
7
ITPUB元老
日期:2005-02-28 12:57:00授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:342008新春纪念徽章
日期:2008-02-13 12:43:03奥运会纪念徽章:羽毛球
日期:2008-05-28 20:12:222009新春纪念徽章
日期:2009-01-04 14:52:282010新春纪念徽章
日期:2010-03-01 11:06:12
26#
发表于 2003-5-16 19:16 | 只看该作者

Re: hehe

最初由 biti_rainy 发布
[B]update b bb
set bb.col3 = (select aa.col3 from a aa
where aa.col1=bb.col1 and aa.col2=bb.col2) [/B]


看我的:UPDATE tZQGL A
       SET (A.CBYE,A.LJYK)=
       (SELECT B.CBYE,B.SXYK FROM tZQYELS B WHERE B.JSRQ=25001231
        AND B.YYB='2601' AND A.YYB='2601' AND A.KHH=B.KHH AND A.GDH=B.GDH
        AND A.ZQDM=B.ZQDM AND A.JYS=B.JYS)
成功更新!
可UPDATE tZQGL A
       SET (A.MCSL,A.CBYE,A.LJYK)=
       (SELECT B.MCSL,B.CBYE,B.SXYK FROM tZQYELS B WHERE B.JSRQ=25001231
        AND B.YYB='2601' AND A.YYB='2601' AND A.KHH=B.KHH AND A.GDH=B.GDH
        AND A.ZQDM=B.ZQDM AND A.JYS=B.JYS)
  就提示ora-01407错误!其实跟本就没NULL值。
非要加个条件where exists (select 1 FROM tZQYELS B WHERE B.JSRQ=25001231
        AND B.YYB='2601' AND A.YYB='2601' AND A.KHH=B.KHH AND A.GDH=B.GDH
        AND A.ZQDM=B.ZQDM AND A.JYS=B.JYS)
才可以!有谁能解释吗?

使用道具 举报

回复
论坛徽章:
65
管理团队2006纪念徽章
日期:2006-04-16 22:44:452012新春纪念徽章
日期:2012-02-13 15:11:522012新春纪念徽章
日期:2012-02-13 15:11:522012新春纪念徽章
日期:2012-02-13 15:11:522012新春纪念徽章
日期:2012-02-13 15:11:52马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:11:52
27#
发表于 2003-5-17 13:17 | 只看该作者
update b
set col3 = (select col3 from a
where a.col1=b.col1 and a.col2=b.col2)
我覺得上面這句是理所當然一句,為何你們想得如此复杂.

使用道具 举报

回复
论坛徽章:
7
ITPUB元老
日期:2005-02-28 12:57:00授权会员
日期:2005-10-30 17:05:33会员2006贡献徽章
日期:2006-04-17 13:46:342008新春纪念徽章
日期:2008-02-13 12:43:03奥运会纪念徽章:羽毛球
日期:2008-05-28 20:12:222009新春纪念徽章
日期:2009-01-04 14:52:282010新春纪念徽章
日期:2010-03-01 11:06:12
28#
发表于 2003-5-18 08:38 | 只看该作者
最初由 ocp8i 发布
[B]update b
set col3 = (select col3 from a
where a.col1=b.col1 and a.col2=b.col2)
我覺得上面這句是理所當然一句,為何你們想得如此复杂. [/B]


呵呵,谁也想简单点的,可要是不行,当然要想想其他办法呀!

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
29#
发表于 2003-10-30 15:13 | 只看该作者
SQL> update b set b.col3=(select col3 from a where a.col1=b.col1 and a.col2=b.co
l2);

已更新3行。

SQL> select * from b;

      COL1       COL2       COL3
---------- ---------- ----------
         4          5          6
         7          8          9
         1          2          3

SQL>

oracle 8i,可以的,你的不可以吗?

使用道具 举报

回复
论坛徽章:
2
30#
发表于 2003-10-30 15:22 | 只看该作者
这么老的贴子都给翻出来了

使用道具 举报

回复

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

本版积分规则 发表回复

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