我正在运行下面的查询,在这里我只是得到了一堆ID,我想在更新语句中使用这些ID,然后用它们来更新
SET sql_safe_updates=0;
create temporary table nullmeters
select me.id from met me
join tab1 ac on ac.accounts_id = me.id
join tab2 po on ac.val1 = po.id
join tab3 te on te.id = me.team_id
where
me.name = 'NULL';
select * from nullmeters;
update tab1 set deleted = 1 where id in (
select id from nullmeters
);
update met set deleted = 1 where id in (
select id from nullmeters
);
drop temporary table nullmeters;
当我运行这个时,它看起来会陷入运行状态,而不是在update语句中继续前进。当尝试使用从临时表中选择的id进行更新时,它看起来会卡住。select是好的,temp表保存了查询中的所有id
如果我运行update语句,但实际值为i。e
update tab1 set deleted = 1 where accounts in('1','2');
update met set deleted = 1 where id in('1','2');
它工作正常。
1条答案
按热度按时间9cbw7uwe1#
MySQL通常对
WHERE ... IN (SELECT ...)
的优化很差。使用join会更好:另外,您应该在
nullmeters
的id
列上添加索引。