SQL Update + Inner Join on a range of rows

SQL Update + Inner Join on a range of rows

我有 table "Temp" 和 table "Today",具有相同的列名("url" 和 "date")。

我想在 url 匹配时更新 "Temp" table 的 "date" 列。 但是我的 table 相当大(30K 个元素)并且 phpmyadmin 不想执行以下 - 正确 - 查询:

update Temp Tp
inner join Today Ty on
    Tp.url = Ty.url
set Tp.date = Ty.date

我得到一个 "Query execution was interrupted, error #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 clause'

中的未知列 '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

参见SQLFiddle(尽管出于实际原因,此演示仅限于 2 个)。

虽然您没有特别询问过这个问题(您可能已经知道),但为了完整起见,应该提到对于后续查询,LIMIT 应该与 OFFSET 一起使用(或者只需使用快捷方式 LIMIT 1000, 1000LIMIT 2000,1000LIMIT <offset>, <limit>