方友松的技术blog

信息技术之价值不仅体现于提高既有的业务效率;更重要的,是其本质:创造管理的智慧,推动行为的不断创新与超越!

用户操作
[即时聊天] [发私信] [加为好友]
方友松ID:truexf
78103次访问,排名1274好友0人,关注者0
truexf的文章
原创 120 篇
翻译 0 篇
转载 9 篇
评论 40 篇
Fey的公告

灌水光荣,偷盗可耻

关于
fangyousong@gmail.com
最近评论
sap99:www.sap99.com/,SAP99资料多多

SAP免费资料下载
http://www.sap99.com

有很多的学习资料,推荐一下,
sgear:交换个链接把

我的http://blog.csdn.net/sgear

同意的话在我blog里留个脚印。我会把你添加上的。
Lost_Painting:錯誤一大把啊... ...
CoolSlob:呵呵,会吹牛的人都活得好,这是现实。
半截:城管这行当,没有特别的监督管理部门.
象我这行多少还有个叫文明执法,热情服务的说法.

一个管理松懈,人员复杂,又有执法权的部门,他们能不骄横?

那么结果只有一个,政府的形象被他们毁了.
文章分类
收藏
    相册
    2006年8月南昌之行
    我要去的地方
    链接
    1. 余秋雨的blog
    2. 老鼠赟赟的blog
    3. 小虫的blog
    4. 平平的blog
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 關聯update SQL收藏

    新一篇: 信息系統通用緩存設計 | 旧一篇: 性感图片

    部門表A,字段:
    SDEPTKEY:主鍵
    SDEPTID:部門號
    SDEPTNAME:部門名稱
    員工表B, 字段:
    SEMPKEY:主鍵
    SDEPTKEY:foreign key:A.SDEPTKEY
    SDEPTID:部門號
    SEMPID:員工號
    SEMPNAME:姓名

    現在B.SDEPTKEY亂了,要根據B.DEPTID = A.DEPTID的關系。把它修正過來。
    在SQL Server中,有兩種Update SQL的寫法:
    1.SQL SERVER特有的寫法
    UPDATE B SET SDEPTKEY = A.SDEPTKEY FROM A WHERE A.SDEPTID = B.SDEPID

    2.標準的SQL
    UPDATE B SET SDEPTKEY = (SELECT SDEPTKEY FROM A WHERE A.SDEPTID = B.SDEPTID)

    在SQL Server中測試,兩者的區別:
    區別之一:
    第一種方法更快,SQL SERVER有針對性的join(會利用到索引)處理。
    第二種方法更慢,逐行查找替換,若未找到,則返回null,且update為null

    區別之二:
    假設B表的數據如下:
    SEMPKEY,SDEPTKEY,SDEPTID...
    ---------------------------
    001,789,A01...
    002,456,A01...
    003,002,A02...
    004,003,A03...
    ---------------------------

    A表的數據如下:
    SDEPTKEY,SDEPTID...
    ---------------------------
    001,A01
    ---------------------------

    執行第一種Update SQL后,B表的結果如下:
    SEMPKEY,SDEPTKEY,SDEPTID...
    ---------------------------
    001,001,A01...
    002,001,A01...
    003,002,A02...
    004,003,A03...
    ---------------------------
    執行第二種Update SQL后,B表的結果如下:
    SEMPKEY,SDEPTKEY,SDEPTID...
    ---------------------------
    001,001,A01...
    002,001,A01...
    003,null,A02...
    004,null,A03...
    ---------------------------
    也就是說,
    UPDATE B SET SDEPTKEY = A.SDEPTKEY FROM A WHERE A.SDEPTID = B.SDEPID
    轉換為sql標準寫法,應該要加一個where條件WHERE EXISTS(SELECT * FROM A WHERE A.SDEPTID = B.SDEPTID),即:
    UPDATE B SET SDEPTKEY = (SELECT SDEPTKEY FROM A WHERE A.SDEPTID = B.SDEPTID)
    WHERE EXISTS(SELECT * FROM A WHERE A.SDEPTID = B.SDEPTID)

    在oracle下測試標準的update SQL,效果不在sql server中一樣。
     

    发表于 @ 2008年01月11日 12:44:00|评论(loading...)|编辑

    新一篇: 信息系統通用緩存設計 | 旧一篇: 性感图片

    评论:没有评论。

    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © Fey