SQL语句_多表联查——插入或者更新

小咸儿根据业务需求做定时同步数据任务,需将A表数据定时同步到B表,先进行多表联查,再添加记录。当记录存在时执行更新操作,用到关键句on duplicate key update。使用该语句要注意有唯一字段,且不能加where条件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  最近小咸儿根据业务需求,做一个定时同步数据的任务。

业务需求:

  A表要定时将数据同步到B表中,但是这其中还涉及到了其他的表,所以第一步需要进行多表联查。

SELECT
	user_id,
	user_name,
	user_code,
	organization_name
FROM
	`tc_organization_user` AS tc LEFT JOIN tik_user AS tk ON tc.user_id = tk.id LEFT JOIN tc_organization AS tco ON tco.id = tc.organization_id
WHERE
	organization_id = '*************' 

  将数据查询出来之后,第二步则需要添加记录,这时候需要注意的是,当记录存在时,则执行更新操作。这里就需要用到关键句 on duplicate key update

作用: 这个语句的作用就是,当执行SQL语句时,如果存在该记录则执行更新操作,如果不存在该记录则执行插入操作。

INSERT INTO tim_mentorship_user ( id, user_name, user_code, user_grade, create_time, update_time, operator, creator, remark, is_delete ) SELECT DISTINCT
	user_id,
	user_name,
	user_code,
	organization_name,
	tk.create_time,
	tk.update_time,
	tk.operator,
	tk.creator,
	tk.remark,
	tk.is_delete 
FROM
	tc_organization_user AS tc
	LEFT JOIN tik_user AS tk ON tc.user_id = tk.id
	LEFT JOIN tc_organization AS tco ON tco.id = tc.organization_id 
WHERE
	tk.is_delete = 0 AND
	organization_id = '**************'
	ON DUPLICATE KEY UPDATE user_name = tk.user_name,
	user_code = tk.user_code,
	user_grade = tco.organization_name,
	create_time = tk.create_time,
	update_time = now(),
	operator = tk.operator,
	creator = tk.creator,
	remark = tk.remark,
	is_delete = tk.is_delete

注意点: 使用该语句,需要注意两点:

  • 判断该条记录是否存在的标准是什么?也就是说必须有一个字段是唯一不能重复的
  • on duplicate key update 语句是不能添加where条件的

感谢您的阅读~

评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值