您的位置:首页 > 数据库 > MySQL

You can't specify target table 'item' for update in FROM clause

2017-07-11 17:56 489 查看
今天写sql处理历史数据时,报出标题的错误,sql如下:

UPDATE item
SET platf_min_sell_price = NULL,
platf_max_sell_price = NULL
WHERE
item_id IN (
SELECT DISTINCT
item_id
FROM
item_sku
WHERE
sku_id IN (
SELECT
sku_id
FROM
trade_sku_price
WHERE
item_id IN (
SELECT
item_id
FROM
item
WHERE
platform_id = 123456
AND platf_min_sell_price IS NOT NULL
AND platf_max_sell_price IS NOT NULL
)
)
AND attributes IS NOT NULL
)


意思大概就是你不能一边查着item表一边修改它,否则可能会引起问题。

stackoverflow给出的一种解决办法是,把子句查询结果存放到临时表中,修改后的sql如下:

UPDATE item
SET platf_min_sell_price = NULL,
platf_max_sell_price = NULL
WHERE
item_id IN (
SELECT
item_id
FROM
(
(
(
SELECT DISTINCT
item_id
FROM
item_sku
WHERE
sku_id IN (
SELECT
sku_id
FROM
trade_sku_price
WHERE
item_id IN (
SELECT
item_id
FROM
item
WHERE
platform_id = 123456
AND platf_min_sell_price IS NOT NULL
AND platf_max_sell_price IS NOT NULL
)
)
AND attributes IS NOT NULL
)
)
) AS t
)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  select sql update mysql
相关文章推荐