【发布时间】:2015-10-27 07:57:04
【问题描述】:
我有一个包含现有数据的表users,我将更新的数据上传到一个临时表users_temp。
我正在尝试创建两个查询,一个用于更新 users 中的 name 和 department_id 行,并在匹配 id 时使用来自 users_temp 的数据。
另一个是删除users 中与users_temp 中的id 不匹配的行。
请帮忙。
【问题讨论】:
标签: mysql
我有一个包含现有数据的表users,我将更新的数据上传到一个临时表users_temp。
我正在尝试创建两个查询,一个用于更新 users 中的 name 和 department_id 行,并在匹配 id 时使用来自 users_temp 的数据。
另一个是删除users 中与users_temp 中的id 不匹配的行。
请帮忙。
【问题讨论】:
标签: mysql
您可以通过在更新中添加联接来做到这一点。
UPDATE users u
INNER JOIN users_temp ut on u.id = ut.id //or whatever the matching fields are
SET u.name = ut.name, u.department_id = ut.department_id;
我相信有人会为第二个查询提供一个更有效的示例,但这可以解决问题:
【讨论】:
update users
inner join users_temp using (id)
set users.name = users_temp.name,
users.department_id = users_temp.department_id
delete from users
where not exists (select * from users_temp where users_temp.id = users.id)
【讨论】:
WHERE 子句中的不匹配行,为什么要使用LEFT JOIN?使用INNER JOIN,这样它们就不会被包含在第一位。