有没有办法在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中使用的表。
答案 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' ;