1

有什么方法可以在 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 不支持更新选择中使用的表。

4

2 回答 2

0

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

于 2013-04-18T22:30:55.873 回答
0

您可以JOINUPDATE

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' ;
于 2013-04-18T22:40:43.753 回答