天天看點

工作遇到的sql問題:A表a字段更新到B表b字段 & A表c字段根據a字段進行刷數一:需求介紹

工作遇到的sql問題:A表a字段更新到B表b字段 & A表c字段根據a字段進行刷數

  • 一:需求介紹
    • 二:A表a字段更新到B表b字段
    • 三:A表c字段根據a字段進行刷數

一:需求介紹

1:A表a字段更新到B表b字段

将book表的 author字段更新為user表的 name字段,條件是book.id = user.id

2:A表c字段根據a字段進行刷數

demo表的names字段存了多個姓名,用英文逗号分隔開

二:A表a字段更新到B表b字段

book表的author字段

工作遇到的sql問題:A表a字段更新到B表b字段 & A表c字段根據a字段進行刷數一:需求介紹

user表的name字段

工作遇到的sql問題:A表a字段更新到B表b字段 & A表c字段根據a字段進行刷數一:需求介紹
## 更新book表中的author字段 變成user表中的name
update book set author = (
	select name from user where user.id = book.id
)
where book.id in (select id from user )
## 這裡 where 條件必須檢查下id相同的才更新,不然book表中不在user表的資料,會被更新為null
           

執行結果

工作遇到的sql問題:A表a字段更新到B表b字段 & A表c字段根據a字段進行刷數一:需求介紹

ps: 這種批量操作 對資料量大的表會很慢。

三:A表c字段根據a字段進行刷數

demo表count字段 要統計names有多少個名字

工作遇到的sql問題:A表a字段更新到B表b字段 & A表c字段根據a字段進行刷數一:需求介紹

查詢sql

select *,IF
	((
			LENGTH( names )- LENGTH(
			REPLACE ( names, ',', '' )) + 1 
			) IS NULL,
		0,(
			LENGTH( names )- LENGTH(
			REPLACE ( names, ',', '' )) + 1 
		)
	)  
	from demo
           

查詢結果:

工作遇到的sql問題:A表a字段更新到B表b字段 & A表c字段根據a字段進行刷數一:需求介紹

更新sql

## 統計每行資料有多少個名字
update demo set count = IF
	((
			LENGTH( names )- LENGTH(
			REPLACE ( names, ',', '' )) + 1 
			) IS NULL,
		0,(
			LENGTH( names )- LENGTH(
			REPLACE ( names, ',', '' )) + 1 
		)
	) ;
           

更新結果

工作遇到的sql問題:A表a字段更新到B表b字段 & A表c字段根據a字段進行刷數一:需求介紹

ps: 僅記錄工作中遇到的sql問題,我是渣渣濤,我要努力學習。

繼續閱讀