Mysql SQL更新+;行范围上的内部联接
我有表“Temp”和表“Today”,它们有相同的列名(“url”和“date”) 我想在url匹配时更新“Temp”表的“date”列。 但是我的表非常大(30K个元素),phpmyadmin不希望执行以下右查询:Mysql SQL更新+;行范围上的内部联接,mysql,range,inner-join,Mysql,Range,Inner Join,我有表“Temp”和表“Today”,它们有相同的列名(“url”和“date”) 我想在url匹配时更新“Temp”表的“date”列。 但是我的表非常大(30K个元素),phpmyadmin不希望执行以下右查询: update Temp Tp inner join Today Ty on Tp.url = Ty.url set Tp.date = Ty.date 我得到一个“查询执行被中断,错误#1317” 为什么?我认为这是因为我为一个共同化服务器(OVH)付费,并且我不能执行超
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-on子句中的未知列“Ty.url”
我不知道为什么?据我所知,这里有两个问题。首先,@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
请参阅(尽管出于实际原因,此演示仅限于2)
虽然您没有明确询问过这一点(您可能已经知道),但为了完整起见,应该提到,对于后续查询,
LIMIT
应与OFFSET
一起使用(或者只使用快捷方式LIMIT 1000,1000
,LIMIT 20001000
,LIMIT,
,等等。PS:我用这个线程:写第二个查询,但我达到了我的极限…因为你的子查询只有一列…“Ty.date”。您需要将Ty.url添加到select语句中。这是MySQL还是SQL Server?谢谢@pmbAustin,我在“Tp2.date”之后添加了“Tp2.url”在SELECT附近的第4行。最后一个问题:您确认我正在进行完整Temp和有限Ty之间的内部联接吗?@M.Ali,不确定答案,我在OVH托管,我使用phpmyadmin接口,我猜这是mysqlThank!但我仍然错过了一些东西:对于“limit 100”,查询需要1.5秒,但是对于“limit 20000,2”我有一个查询中断…为什么它有2行那么长?!偏移量越高,所需时间就越长。有关更多详细信息和提高性能的提示,请参阅。