關於昨天SQL問題的延續


昨天我提了一個問題如下,感謝大家的回復,
https://forum.csdn.net/PointForum/Manage/TopicManageView.aspx?forumID=f5ecbfe4-f43f-4cb9-9f32-efeacf9fd57a&topicID=0d8d1b62-e5d6-490e-9dd0-c4ee89ec07cd&date=2011-12-07+11%3a10%3a48&v=-1

不過運行下來存在效率的提升問題,我2張表各有10萬條數據,到現在還沒有運行完成。


為此我計划按以下簡化需求,只取第一次發現的值,再次請教大家。


有兩個表table a,table b 均有兩個字符串字段x,y. 查詢這樣的結果,只要b.x a.x某記錄的子集就將b.y的值更新為 第一次發現的a.y。  (注:取第一次)

tabel a
  x y
AABBCCDD 6768
TTCCXXDD 8788
HJHJHJHJ 9999

tabel b

  x y
BBCC 1232
CXXDD 87
HJ 6699


運行結果,將B更新為


tabel b
  x y
BBCC 6768
CXXDD 8788
HJ 9999

菜鳥請教SQL寫法

5 个解决方案

#1


條件好像不足哦,有沒有關連

#2


你A、B表之間沒什么聯系如何進行更新,是否還有其他條件字段。還是你要的效果就是union all的效果

#3


有關聯呀,b.x 可能是 a.x的子集

#4


[html]https://forum.csdn.net/PointForum/Manage/TopicManageView.aspx?forumID=f5ecbfe4-f43f-4cb9-9f32-efeacf9fd57a&topicID=0d8d1b62-e5d6-490e-9dd0-c4ee89ec07cd&date=2011-12-07+11%3a10%3a48&v=-1[/html]

這是昨天大家提的方案

#5


create table #a
(
 x varchar(10),
 y int
)
go

insert into #a
select 'AABBCCDD',6768 union all
select 'TTCCXXDD',8788 union all
select 'HJHJHJHJ',9999
GO

create table #b
(
 x varchar(10),
 y int
)
go
insert into #b
select 'BBCC',1232 union all
select 'CXXDD',87 union all
select 'HJHJ',6699
go

update b set y=a.y from #b b cross apply (select top 1 y from #a where charindex(b.x, x)>0) a;

select * from #b;

drop table #a;
drop table #b;

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com