SQL中的update语句涉及到两张表,老是忘,现在记下了

本文介绍SQL中Update语句在SQLServer、Oracle、MySQL三种数据库中的用法,包括多表更新的语法示例,并通过案例演示如何在特定条件下更新不同表中的数据。
 

使用SQL中UPDATE语句实现多表更新时间:2010-09-17 10:39 来源:互联网 

在开发中,数据库交换使用,关键性的语法各不相同,这是一件让开发人员很头痛的事情.下面为您介绍SQL中Update语句更新多表时在SQL Server,Oracle,MySQL三种数据库中的用法.,供您参考。

我也试了SQLite数据库,都没成功,不知是不支持多表更新还是咋的. 在本例中: 我们要用表gdqlpj中的gqdltks,bztks字段数据去更新landleveldata中的同字段名的数据,条件是当landleveldata 中的GEO_Code字段值与gdqlpj中的lxqdm字段值相等时进行更新.

SQL Server语法: { 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中UPDATE示例: 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

有A、B张表,其记录如下:

A表
c1       c2
--------------
1 a1
2 a2
3 a3
8 a8

B表
c1       c3
--------------
1 b1
2 b1
3 b3
10 b10

A.c1与B.c1相等,用一条sql语句,实现A.c2的值更新为B.c3
------------------------
UPDATE    A
SET A.c2 =B.c3
from A ,B
where A.c1=B.c1

UPDATE    A
SET A.c2 =B.c3
from A inner join B on A.c1=B.c1

注意:update后面是不能跟多表的,但跟在from子句后面

 

文章转载自网管之家:http://www.bitscn.com/pdb/mssql/201010/191163.html

SQL中,通过一张的数据更新另一张的数据可以通过`UPDATE`语句结合`JOIN`来实现。这种操作在不同的数据库系统中语法可能略有差异,但总体思路一致。以下是详细的实现方法和示例。 在MySQL中,可以使用以下语法来更新: ```sql UPDATE table1 JOIN table2 ON table1.join_column = table2.join_column SET table1.target_column = table2.source_column; ``` 这里,`table1`是需要被更新的,而`table2`提供了更新的数据源。通过指定`ON`后面的连接条件,可以确保两个中的相关记录正确匹配。`SET`子句定义了如何用`table2`中的`source_column`列的值来更新`table1`中的`target_column`列。 对于SQL Server,更新语句也非常相似,但使用了稍微不同的语法: ```sql UPDATE t1 SET t1.target_column = t2.source_column FROM table1 AS t1 INNER JOIN table2 AS t2 ON t1.join_column = t2.join_column; ``` 在这个例子中,`t1`和`t2`分别是`table1`和`table2`的别名,它们通过`INNER JOIN`基于`join_column`字段连接起来,并且`table1`的`target_column`字段被`table2`的`source_column`字段值所更新[^3]。 当需要更新的和提供数据的之间存在复杂的逻辑关系时,还可以使用子查询来完成更新操作。例如,如果需要根据`table2`中的聚合信息来更新`table1`,可以这样写: ```sql UPDATE table1 SET target_column = (SELECT AVG(source_column) FROM table2 WHERE table2.join_column = table1.join_column) WHERE EXISTS (SELECT 1 FROM table2 WHERE table2.join_column = table1.join_column); ``` 这段代码会根据`table2`中与`table1`相匹配的所有记录计算出`source_column`的平均值,并用这个平均值来更新`table1`中的`target_column`。`WHERE EXISTS`部分确保只有那些在`table2`中有对应记录的`table1`记录才会被更新[^5]。 这些方法都允许你在不丢失现有数据的情况下,利用一个的数据来更新另一个的数据。需要注意的是,在执行更新操作之前,应该总是备份数据或者至少确认更新条件是正确的,以避免意外修改或丢失重要数据。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值