❶ sql兩個表之間內容更新問題
sql兩個表之間內容更新問題
當用一個表中的數據來更新另一個表中的數據,T-SQL提供多種寫法(下面列出了二種),但建議用第一種寫法,雖然傳統,但結構清晰。
並且要注意,當用一個表中的數據來更新另一個表中的數據時,二個表一定要有關聯!
❷ SQL如何更新關聯查詢出來的虛擬表數據
1建立一個觸發
2物化試圖建立一個(快)
創建物化視圖日誌上的名字 - 。建立物化存儲在特定的表空間
表空間的用戶視圖日誌; - 指定表空間
下降物化視圖的名稱;
創建物化視圖的名稱 - 創建物化試圖
刷新提交快速
- 作為<br刷新後立即提交
br選擇/> A. *
從一個表名
❸ 請教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;
(4)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語句
update 表名 set 欄位1='-5' , 欄位2='100' where 欄位3=0101;
❻ 如何實現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裡面如何實現關聯表數據的更新
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 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 幾張表互相關聯 更改一張資料庫信息 相應的更新相關聯的數據
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;