zoukankan      html  css  js  c++  java
  • update中加入select

    最常用的update语法是:
    UPDATE <table_name>
    SET <column_name1> = <value>, SET <column_name2> = <value>

    如果我的更新值Value是从一条select语句拿出来,而且有很多列的话,用这种语法就很麻烦
    第一,要select出来放在临时变量上,有很多个哦
    第二,再将变量进行赋值。
    列多起来非常麻烦,能不能像Insert那样,把整个Select语句的结果进行插入呢?就好象下面
    insert into table1
    (c1, c2, c3)
    (select v1, v2, v3 from table2)

    答案是可以的,具体的语法如下:
    UPDATE <table_name> <alias>
    SET (<column_name>,<column_name> ) = (
    SELECT (<column_name>, <column_name>)
    FROM <table_name>
    WHERE <alias.column_name> = <alias.column_name>)
    WHERE <column_name> <condition> <value>;

    下面是这样一个例子:

    两个表a、b,想使b中的memo字段值等于a表中对应id的name值
    表a:id, name
    1 王
    2 李
    3 张
    表b:id,ClientName  
                1
    2
    3
    (MS SQL Server)语句:update b   set   ClientName    = a.name    from a,b    where a.id = b.id 

    (Oralce)语句:update b   set   (ClientName)    =   (SELECT name FROM a WHERE b.id = a.id)

    update set from 语句格式

    当where和set都需要关联一个表进行查询时,整个update执行时,就需要对被关联的表进行两次扫描,显然效率比较低。
    对于这种情况,Sybase和SQL SERVER的解决办法是使用UPDATE...SET...FROM...WHERE...的语法,实际上就是从源表获取更新数据。

    在 SQL 中,表连接(left join、right join、inner join 等)常常用于 select 语句,其实在 SQL 语法中,这些连接也是可以用于 update 和 delete 语句的,在这些语句中使用 join 还常常得到事半功倍的效果。

    Update T_OrderForm SET T_OrderForm.SellerID =B.L_TUserID
    FROM T_OrderForm A LEFT JOIN T_ProductInfo   B ON B.L_ID=A.ProductID

    用来同步两个表的数据!

    Oralce和DB2都支持的语法:

    UPDATE A SET (A1, A2, A3) = (SELECT B1, B2, B3 FROM B WHERE A.ID = B.ID)

    MS SQL Server不支持这样的语法,相对应的写法为:
    UPDATE A  SET A1 = B1, A2 = B2, A3 = B3  FROM A LEFT JOIN B ON A.ID = B.ID

    个人感觉MS SQL Server的Update语法功能更为强大。MS SQL SERVER的写法:
    UPDATE A SET A1 = B1, A2 = B2, A3 = B3 FROM A, B WHERE A.ID = B.ID

    在Oracle和DB2中的写法就比较麻烦了,如下:

    UPDATE A SET (A1, A2, A3) = (SELECT B1, B2, B3 FROM B WHERE A.ID = B.ID)
    WHERE ID IN (SELECT B.ID FROM B WHERE A.ID = B.ID)

  • 相关阅读:
    Java实现 蓝桥杯VIP 算法提高 阮小二买彩票
    Java实现 蓝桥杯VIP 算法提高 传染病控制
    Java实现 蓝桥杯VIP 算法提高 传染病控制
    Java实现 蓝桥杯VIP 算法提高 传染病控制
    Java实现 蓝桥杯VIP 算法提高 传染病控制
    Java实现 蓝桥杯VIP 算法提高 传染病控制
    Java实现 蓝桥杯VIP 算法提高 企业奖金发放
    Java实现 蓝桥杯VIP 算法提高 企业奖金发放
    让程序后台隐藏运行
    只要你喜欢,并且可以养家糊口,就是好的
  • 原文地址:https://www.cnblogs.com/jes_shaw/p/1862599.html
Copyright © 2011-2022 走看看