例:有表a和表b,兩表資料都過百萬,兩表資料結構一樣,如下**
table a要實現表a資料對比表b資料,如果name,description,source都相同,更新表b的price為表a的price,且表a的引入時間要大於表b。
想了一整天,試過n多方法。
題外:linq to sql 的update 超過1萬條就會卡爆,所以放棄之。用2.0的原始sql去執行。
個人認為最快捷方式:
1.用游標集合目標表b。
fetch next from [cursor] into @id---id集合
2.用迴圈出來的單個id去找出a表name,description,source都相同的行。
3.查詢出來的表a結果,quotetime倒序,取top 1的price 賦值給表b當前id的price
4.刪除查詢出來表a結果的所有資料
如此迴圈下,表a就只剩下不相同的資料
5.插入這些不相同的資料。
只用了一次迴圈,就完成兩表資料的更新和新增。
我是用儲存過程實現,附上**,可能更直觀點
view code
忘了,還要新增a表剩下不相同的資料到b裡insert into a
select * from b
update a froma,bwhere a.id=b.id
and a.spec=b.spec
1 declare mycursor cursor for2select id from
[a]3
4open mycursor
5declare @id sysname
6 fetch next from
mycursor into @id
7while(@@fetch_status-0)8
begin
9 ----更新目標表的資料
10 update b set price=(
11select top 1 a.price from a asa12
inner join (
13select
name,description,source,price,quotetime
14from b where id=@id) as
b15 on a.name=b.name
16 and a.description=b.description
17 and a.source=b.source
18order by a.quotetime desc)
19where id=@id
2021 ----刪除源表的相同資料
22 delete a from a asa23
inner join (
24select
name,description,source,price,quotetime
25from b where id=@id) as
b26 on a.name=b.name
27 and a.description=b.description
28 and a.source=b.source
2930 fetch next from
mycursor into @id
31end
32close mycursor
33 deallocate mycursor
sql跨表更新資料
跨表更新資料是我們經常用的乙個操作,特整理一下 原始資料如下,首先是表結構 a dept的初始資料 a emp初始資料 跨表更新sql語句 語句功能,若a emp表中company和a dept中的company相等,更新a emp中deptid 具體寫法一 update e set e.depti...
MySQL百萬級 千萬級資料多表關聯SQL語句調優
mysql百萬級 千萬級資料多表關聯sql語句調優 本文不涉及複雜的底層資料結構,通過explain解釋sql,並根據可能出現的情況,來做具體的優化,使百萬級 千萬級資料表關聯查詢第一頁結果能在2秒內完成 真實業務告警系統優化結果 希望讀者能夠理解sql的執行過程,並根據過程優化,走上自己的 成金之...
MySQL百萬級 千萬級資料多表關聯SQL語句調優
本文不涉及複雜的底層資料結構,通過explain解釋sql,並根據可能出現的情況,來做具體的優化,使百萬級 千萬級資料表關聯查詢第一頁結果能在2秒內完成 真實業務告警系統優化結果 希望讀者能夠理解sql的執行過程,並根據過程優化,走上自己的 成金之路 需要優化的查詢 使用explain 出現了usi...