2013-04-18 57 views
1

有沒有辦法在MySQL中做以下查詢?MySQL的 - UPDATE WHERE字段IN查詢與LIMIT拒絕

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中使用的表。

+0

只需使用一個臨時表來存儲你的子查詢的結果 –

回答

0

既然它的格式正確,它看起來像你的子查詢是獨立的,所以我真的推薦使用臨時表。如果您希望子查詢的結果將發生變化,您可以批量更新並仍然使用臨時表。

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' ;