作業中に発生した SQL の問題: テーブル A のフィールド a がテーブル B のフィールド b に更新され、テーブル A のフィールド c がフィールド a に基づいて更新されます。

作業中に発生した SQL の問題: テーブル A のフィールド a がテーブル B のフィールド b に更新され、テーブル A のフィールド c がフィールド a に基づいて更新されます。

1: 要件の概要


1: テーブル Aの a フィールドは、B テーブルの b フィールドの user テーブルの name フィールドの値に更新され、user_info テーブルの user_name ワードと同期されます。

2: テーブル A の c フィールドは、a フィールドに基づいて更新されます。
デモ テーブルの names フィールドには、英語のカンマで区切られた複数の名前が格納されます。

2: テーブル A のフィールド a をテーブル B のフィールド b に更新します

user表
ここに画像の説明を挿入します

user_info表
ここに画像の説明を挿入します

## 更新book表中的author字段 变成user表中的name
update  user_info ui set user_name = (
select u.name from user u where u.id = ui.user_id
)
// where ui.user_id in (select id from user )
## 这里 where 条件必须检查下id相同的才更新,否则不在user表的数据,user_name字段会被更新为null

の結果

ここに画像の説明を挿入します

ps: このバッチ操作は、大量のデータを含むテーブルでは非常に遅くなります。

3: テーブル A の c フィールドが a フィールドに基づいて更新されます。

デモ テーブルの count フィールドは、名前に含まれる名前の数をカウントします。
ここに画像の説明を挿入します

SQLのクエリ

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

検索結果:
ここに画像の説明を挿入します

SQLを更新する

## 统计每行数据有多少个名字
update demo set count = IF
	((
			LENGTH( names )- LENGTH(
			REPLACE ( names, ',', '' )) + 1 
			) IS NULL,
		0,(
			LENGTH( names )- LENGTH(
			REPLACE ( names, ',', '' )) + 1 
		)
	) ;

更新結果
ここに画像の説明を挿入します
ps: 仕事中に発生した SQL の問題だけを記録しています。私は Zha Zhatao です。一生懸命勉強しなければなりません。

おすすめ

転載: blog.csdn.net/qq_37700773/article/details/119030217