SQL Update +内部联接在一系列行

时间:2015-09-28 21:27:27

标签: mysql range inner-join

我有桌子" 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条款'

我无法找出原因?

1 个答案:

答案 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, 1000LIMIT 2000,1000LIMIT <offset>, <limit>