多表关联UPDATE语句怎么写呀?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多表关联UPDATE语句怎么写呀?相关的知识,希望对你有一定的参考价值。

表a 两个字段 号码hm1,时间sj1
表b 两个字段 号码hm2,时间sj2

如果表b中hm2和表a中hm1相同,
就把表a中的sj1替换为表b中相同号码的sj2

这个应该怎么写语句呀 ?

update A,B set A.sj1=B.sj2
where
a.hm1=b.hm1
新手,不知道这样写对不对。
参考技术A UPDATE多表更新(转)(2008-05-12 15:29:04)
转载标签:update多表更新sql 分类:php网络编程
在开发中,数据库来回换,而有些关键性的语法又各不相同,这是一件让开发人员很头痛的事情.本文总结了Update语句更新多表时在SQL Server,Oracle,mysql三种数据库中的用法.我也试了SQLite数据库,都没成功,不知是不支持多表更新还是咋的.

在本例中: 我们要用表gdqlpj中的gqdltks,bztks字段数据去更新landleveldata中的同字段名的数据,条件是当 landleveldata 中的GEO_Code字段值与gdqlpj中的lxqdm字段值相等时进行更新.

SQL Server语法:UPDATE table_name WITH ( < table_hint_limited > [ ...n ] ) | view_name | rowset_function_limited SET column_name = expression | DEFAULT | NULL | @variable = expression | @variable = column = expression [ ,...n ] [ FROM < table_source > [ ,...n ] ] [ WHERE < search_condition > ] | [ WHERE CURRENT OF [ GLOBAL ] cursor_name | cursor_variable_name ] [ OPTION ( < query_hint > [ ,...n ] ) ]

SQL Server示例: update a set a.gqdltks=b.gqdltks,a.bztks=b.bztks from landleveldata a,gdqlpj b where a.GEO_Code=b.lxqdm

Oracle语法: UPDATE updatedtable SET (col_name1[,col_name2...])= (SELECT col_name1,[,col_name2...] FROM srctable [WHERE where_definition])

Oracel 示例: update landleveldata a set (a.gqdltks, a.bztks)= (select b.gqdltks, b.bztks from gdqlpj b where a.GEO_Code=b.lxqdm)

MySQL语法: UPDATE table_references SET col_name1=expr1 [, col_name2=expr2 ...] [WHERE where_definition]

MySQL 示例: update landleveldata a, gdqlpj b set a.gqdltks= b.gqdltks, a.bztks= b.bztks where a.GEO_Code=b.lxqdm
参考技术B

ORACLE多表关联UPDATE 语句

1) 最简单的形式

SQL 代码

 --经确认customers表中所有customer_id小于1000均为‘北京‘

--1000以内的均是公司走向全国之前的本城市的老客户:)
update customers
set city_name=北京where customer_id<1000

 

2) 两表(多表)关联update -- 仅在where字句中的连接

SQL 代码
技术分享
--这次提取的数据都是VIP,且包括新增的,所以顺便更新客户类别
update customers a -- 使用别名
set customer_type=01--01 为vip,00为普通
where exists (select 1
from tmp_cust_city b
where b.customer_id=a.customer_id
)
技术分享

 

3) 两表(多表)关联update -- 被修改值由另一个表运算而来

SQL 代码
技术分享
update customers a -- 使用别名
set city_name=(select b.city_name from tmp_cust_city b where b.customer_id=a.customer_id)
where exists (select 1
from tmp_cust_city b
where b.customer_id=a.customer_id
)
-- update 超过2个值
update customers a -- 使用别名
set (city_name,customer_type)=(select b.city_name,b.customer_type
from tmp_cust_city b
where b.customer_id=a.customer_id)
where exists (select 1
from tmp_cust_city b
where b.customer_id=a.customer_id
)
技术分享
-- 方法1.
UPDATE  表2
SET
  表2.C  =  (SELECT  B  FROM  表1  WHERE   表1.A = 表2.A)
WHERE
  EXISTS ( SELECT FROM   表1  WHERE   表1.A = 表2.A)
 
   
-- 方法2
MERGE INTO 表2 
USING 表1
ON ( 表2.A = 表1.A )    -- 条件是 A 相同
WHEN MATCHED THEN UPDATE SET 表2.C = 表1.B   -- 匹配的时候,更新
 
二,

oracle随机读取表中的N条数据方法:

1) select from (select from tablename order by sys_guid()) where rownum < N; 
2) select from (select from tablename order by dbms_random.value) where rownum< N; 
3) select *  from (select from table_name sample(10)   order by trunc(dbms_random.value(0, 1000)))  where rownum < N;
 

说明: 
  sample(10)含义为检索表中的10%数据,sample值应该在[0.000001,99.999999]之间,其中 sys_guid() 和 dbms_random.value都是内部函数

注:
  在使1)方法时,即使用sys_guid() 这种方法时,有时会获取到相同的记录,即:和前一次查询的结果集是一样的(可能是和操作系统有关:windows正常,linux异常;也可能是因为sys_guid()函数本身的问题,有待继续研究)
  所以,为确保在不同的平台每次读取的数据都是随机的,建议采用2)和3)两种方案,其中2)方案更常用。3)方案缩小了查询的范围,在查询大表,且要提取数据不是很不多的情况下,会对查询速度上有一定的提高

以上是关于多表关联UPDATE语句怎么写呀?的主要内容,如果未能解决你的问题,请参考以下文章

ORACLE多表关联UPDATE 语句

ORACLE多表关联UPDATE 语句

ORACLE多表关联UPDATE 语句

ORACLE多表关联UPDATE 语句

ORACLE多表关联UPDATE 语句

SQl update 多表关联 问题