sql关联表更新
㈠ 请教sql语句 如何实现关联表字段更新
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
㈡ 关于SQL UPDATE关联更新
分析如下
1、【如果存在测试临时表,则先删除,便于重复执行SQL】:
IF OBJECT_ID('tempdb..#SourceTable1') IS NOT NULL DROP TABLE #SourceTable1;
IF OBJECT_ID('tempdb..#SourceTable2') IS NOT NULL DROP TABLE #SourceTable2;
IF OBJECT_ID('tempdb..#UpdateTable') IS NOT NULL DROP TABLE #UpdateTable;
(2)sql关联表更新扩展阅读
SQL Aggregate 函数
SQL Aggregate 函数计算从列中取得的值,返回一个单一的值。
有用的 Aggregate 函数:
1、AVG() - 返回平均值
2、COUNT() - 返回行数
3、FIRST() - 返回第一个记录的值
4、LAST() - 返回最后一个记录的值
5、MAX() - 返回最大值
6、MIN() - 返回最小值
7、SUM() - 返回总和
SQL Scalar 函数
SQL Scalar 函数基于输入值,返回一个单一的值。
有用的 Scalar 函数:
1、UCASE() - 将某个字段转换为大写
2、LCASE() - 将某个字段转换为小写
3、MID() - 从某个文本字段提取字符
4、LEN() - 返回某个文本字段的长度
5、ROUND() - 对某个数值字段进行指定小数位数的四舍五入
6、NOW() - 返回当前的系统日期和时间
7、FORMAT() - 格式化某个字段的显示方式
㈢ 在sql里面如何实现关联表数据的更新
1.建个触发器
2.建立个物化试图(速度快)
CREATE MATERIALIZED VIEW LOG ON name--建立物化视图日志保存在特定的表空间
tablespace users; --指定表空间
drop materialized view name;
create materialized view name--创建物化试图
refresh fast
on commit --在提交后立即刷新
as
select
A.*
from tablename A
㈣ sql 几张表互相关联 更改一张数据库信息 相应的更新相关联的数据
oracle下:
oracle只有级联删除,没有级联更新(其实是有的,只是没有on update cascade),所以要实现级联更新有两种方法:
一、在约束中定义延迟更新:alter table child_table
add constraint fk_child_parent
foreign key (id)
references parent_table (id)
initially deferred deferrable;
-- initially deferred deferrable; 这是延迟oracle的一致性检查,通过这个我们可以分别更新主表和子表,然后再提交,这样就能验证通过了,有点麻烦,呵呵,还是用触发器吧
二、通过触发器实现:
CREATE OR REPLACE TRIGGER ID_TRG AFTER UPDATE ON Section FOR EACH ROW
BEGIN
UPDATE Employee SET 部门=:NEW.部门WHERE 部门=:OLD.部门;
END;
㈤ SQLSERVER 多表关联如何更新
update 表C
set 表C.c3=表B.b3
from 表C
where 表C.c1=表A.a2 and 表C.c2=表B.b2
您说的还没搞明白,从语法上讲应该是这样的,不知道行不行,只做过2个表之间关联更新的,您这个要3个表,而且B表和 C表的关联有没有呢?
㈥ sql可以两个表一起更新数据吗
如果两个表有关联的话是可以的,比如A表的id和b表的b_id外键关系就可以
update a left join b on a.id = b.b_id set a.name = '',b.name='' (where条件)
㈦ SQL Server数据库多表关联如何更新
一条Update更新语句是不能更新多张表的,除非使用触发器隐含更新。而表的更新操作中,在很多情况下需要在表达式中引用要更新的表以外的数据。我们先来讨论根据其他表数据更新你要更新的表
一、MS SQL Server 多表关联更新
sql server提供了update的from 子句,可以将要更新的表与其它的数据源连接起来。虽然只能对一个表进行更新,但是通过将要更新的表与其它的数据源连接起来,就可以在update的表达式 中引用要更新的表以外的其它数据。
一般形式:
update A SET 字段1=B表字段表达式, 字段2=B表字段表达式 from B WHERE 逻辑表达式
例如:
UPDATE dbo.Table2
SET dbo.Table2.ColB = dbo.Table2.ColB + dbo.Table1.ColB
FROM dbo.Table2
INNER JOIN dbo.Table1
ON (dbo.Table2.ColA = dbo.Table1.ColA);
实际更新的操作是在要更新的表上进行的,而不是在from子句所形成的新的结果集上进行的
㈧ sql怎样把一个表的数据更新到另一个表
如果都是SQL的数据库的话,在第二步的时候就默认选择SQL Server 的Microsoft OLE DB提供程序 就可以了。
1、打开企业管理器,打开要导入数据的数据库,在表上按右键,所有任务-->导入数据,弹出DTS导入/导出向导,按 下一步 ;
2、选择数据源 Microsoft Excel 97-2000,文件名 选择要导入的xls文件,按 下一步;
3、选择目的 用于SQL Server 的Microsoft OLE DB提供程序,服务器选择本地(如果是本地数据库的话,如 VVV),使用SQL Server身份验证,用户名sa,密码为空,数据库选择要导入数据的数据库(如 client),按 下一步;
4、选择 用一条查询指定要传输的数据,按 下一步;
5、按 查询生成器,在源表列表中,有要导入的xls文件的列,将各列加入到右边的 选中的列 列表中,这一步一定要注意,加入列的顺序一定要与数据库中字段定义的顺序相同,否则将会出错,按 下一步;
6、选择要对数据进行排列的顺序,在这一步中选择的列就是在查询语句中 order by 后面所跟的列,按 下一步;
7、如果要全部导入,则选择 全部行,按 下一步;
8、则会看到根据前面的操作生成的查询语句,确认无误后,按 下一步;
9、会看到 表/工作表/Excel命名区域 列表,在 目的 列,选择要导入数据的那个表,按 下一步;
10、选择 立即运行,按 下一步;
11、会看到整个操作的摘要,按 完成 即可。
㈨ 如何实现MSSQL数据库多表关联更新
--你要先在测试库测试哦
--建表
createtablet_bd_item_info
(
item_noVarchar(20),
item_subnoVarchar(20)
)
--测试数据
insertintot_bd_item_infovalues('12345678','98765432')
insertintot_bd_item_infovalues('123456789012','12345678')
insertintot_bd_item_infovalues('1234567801234','98976543')
--得到需要替换的item_no和item_subno
Select*into#TmpFrom
(
Select*,ROW_NUMBER()over(partitionbyitem_subnoorderbyitem_no)Asid
Fromt_bd_item_infoA
Wherelen(item_no)in(12,13)andLEN(item_subno)=8
Andnotexists(Select*Fromt_bd_item_infoBwhereB.item_no=A.item_subno)
)SwhereID=1
--替换(包含item_no的所有表都替换)
Execsp_MSforeachtable@command1="Update?Setitem_no=B.item_subnoFrom?Ainnerjoin#TmpBonA.item_no=B.item_no",@whereand="Ando.namein(selectdistinctobject_name(object_id)fromsys.columnswherename='item_no')"
--删除临时表
DropTable#Tmp
㈩ sql两个表之间内容更新问题
sql两个表之间内容更新问题
当用一个表中的数据来更新另一个表中的数据,T-SQL提供多种写法(下面列出了二种),但建议用第一种写法,虽然传统,但结构清晰。
并且要注意,当用一个表中的数据来更新另一个表中的数据时,二个表一定要有关联!