MySQL - UPDATE WHERE字段IN查询,LIMIT被拒绝

时间:2013-04-18 22:25:14

标签: mysql subquery

有没有办法在MySQL中执行以下查询?

UPDATE url_source_wp
SET url_source_wp.hash = "ASDF"
WHERE url_source_wp.url IN (SELECT
                              url_source_wp.url
                            FROM url_source_wp
                              LEFT OUTER JOIN url_done_wp
                                ON url_source_wp.id = url_done_wp.url_source_wp AND url_done_wp.url_group = 4 AND
                                   hash IS NULL
                            WHERE url_done_wp.url_source_wp IS NULL
                            ORDER BY url_source_wp.id ASC
                            LIMIT 50);

这里有两个问题: MySQL不支持子查询限制。 MySQL不支持更新select中使用的表。

2 个答案:

答案 0 :(得分:0)

现在它的格式正确,看起来你的子查询是独立的,所以我真的建议使用临时表。如果您希望子查询的结果发生变化,您可以批量更新并仍然使用临时表。

答案 1 :(得分:0)

您可以在JOIN

中使用UPDATE
UPDATE url_source_wp AS upd
  JOIN
    ( SELECT s.url
      FROM url_source_wp AS s
        LEFT OUTER JOIN url_done_wp AS d 
          ON  s.id = d.url_source_wp 
          AND d.url_group = 4
          AND hash IS NULL
      WHERE d.url_source_wp IS NULL
      ORDER BY s.id ASC
        LIMIT 50
    ) AS lim
    ON lim.url = upd.url
SET upd.hash = 'ASDF' ;