我有桌子" Temp"和表"今天",具有相同的列名(" url"和" date")。
我想更新" date" " Temp" url匹配时的表格。 但我的表格相当大(30K元素),phpmyadmin不想执行以下操作 - 右键 - 查询:
update Temp Tp
inner join Today Ty on
Tp.url = Ty.url
set Tp.date = Ty.date
我得到一个"查询执行被中断,错误#1317" 为什么?我希望这是因为我支付共享服务器(OVH)而且我无法执行超过2-3秒的查询。
无论如何,现在我想按范围执行此查询范围。前1000行,1000-2000等。
我尝试了以下内容:
update Temp Tp
inner join
(
select Tp2.date
from Temp Tp2
inner join Today Ty2
on Tp2.url = Ty2.url
limit 1000
) Ty on Tp.url = Ty.url
set Tp.date = Ty.date
但我收到以下错误:#1054 - 未知列' Ty.url'在' on条款'
我无法找出原因?
答案 0 :(得分:1)
据我所知,这里有两个问题。首先,正如@pmbAustin已经提到的,你在子查询中缺少一个列。
其次,我认为您的子查询应该从Ty2中选择日期,而不是Tp2:
update Temp Tp
inner join
(
select Ty2.date, Tp2.url
from Temp Tp2
inner join Today Ty2
on Tp2.url = Ty2.url
limit 1000
) Ty on Tp.url = Ty.url
set Tp.date = Ty.date
请参阅SQLFiddle(尽管出于实际原因,此演示仅限于2)。
虽然你没有特别问过这个问题(而且你可能已经知道了),但为了完整起见,应该提到的是,对于后续查询,LIMIT
应该与OFFSET
一起使用(或者只是使用快捷方式LIMIT 1000, 1000
,LIMIT 2000,1000
,LIMIT <offset>, <limit>
等