0

我有这样的查询:

DELETE dcp 
FROM discount_campaign_product dcp 
JOIN product_categories pc ON dcp.product_id = pc.product_id 
JOIN categories c ON pc.category_id = c.id 
WHERE dcp.discount_campaign_id = discount_campaign_id AND
    FIND_IN_SET(c.id, delete_category) AND 
    EXISTS(SELECT 1 
           FROM discount_campaign_product dcp2 
           WHERE dcp.product_id = dcp2.product_id AND 
                 dcp2.discount_campaign_id = discount_campaign_id);

但我得到这个错误

Error Code: 1093. You can't specify target table 'dcp' for update in FROM clause

我尝试使用此解决方案https://stackoverflow.com/a/45498/12977554

用这个查询SET optimizer_switch = 'derived_merge=off';

但仍然产生相同的错误

4

1 回答 1

1

试试这个:

DELETE dcp 
FROM discount_campaign_product dcp 
JOIN product_categories pc ON dcp.product_id = pc.product_id 
JOIN categories c ON pc.category_id = c.id 
WHERE dcp.discount_campaign_id = discount_campaign_id AND
    FIND_IN_SET(c.id, delete_category) AND
    product_id IN (SELECT product_id
                   FROM (
                      SELECT product_id
                      FROM discount_campaign_product
                      GROUP BY product_id
                      HAVING COUNT(*) > 1) t)
于 2021-02-16T11:20:03.943 回答