Mysql UPDATE在哪里不同或唯一

时间:2017-08-26 12:33:42

标签: mysql

我正在尝试创建一个查询来批量更新id_product不同的值(default_on)。

UPDATE ps_product_attribute_shop
SET default_on=1
FROM ps_product_attribute_shop
JOIN
(
SELECT id_product
FROM 'ps_product_attribute_shop'
GROUP BY id_product
HAVING COUNT(*) = 1
) AS FIRST_PRODUCT
ON FIRST.id_product = ps_product_attribute_shop.id_product

我的数据库看起来像:

   id | product_id | default_on
    ___________________________
    1 | 11238      | NULL
    2 | 11238      | NULL
    3 | 11238      | NULL  
    4 | 11252      | NULL 

因为上面的示例 11238 可以多次找到, 11252 一次。所以我需要更新所有 11238 的所有记录和11252记录

但是不起作用:(

2 个答案:

答案 0 :(得分:1)

您的语法已关闭。它应该是这样的:

UPDATE ps_product_attribute_shop t1
INNER JOIN
(
    SELECT id_product, MIN(id) AS min_id
    FROM ps_product_attribute_shop
    GROUP BY id_product
) t2
    ON t1.id_product = t2.id_product AND
       t1.id         = t2.min_id
SET t1.default_on = 1

除了命令顺序错误外,还要将表名放在子查询中的单引号中。 MySQL中的单引号表示字符串文字。

<强>更新

要处理您显示的更新逻辑,我们可以随意更新每个产品组的最小id记录。上述更新中的子查询标识了应更新的记录。

答案 1 :(得分:0)

试试这个:

UPDATE ps_product_attribute_shop as p
SET default_on=1
WHERE p.id in (
  SELECT MIN(id)
  FROM ps_product_attribute_shop
  GROUP BY id_product
)