2013-04-18 2 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 не поддерживает обновление таблицы, которая используется при выборе.

+0

Просто использовать временную таблицу для хранения результатов вашего подзапроса –

ответ

0

Теперь, когда он правильно отформатирован, похоже, что ваш подзапрос является независимым, поэтому я действительно рекомендую использовать временную таблицу. Если вы надеетесь, что результаты вашего подзапроса изменятся, вы можете выполнять периодические обновления и использовать временную таблицу.

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