我正在尝试创建一个查询来批量更新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记录
但是不起作用:(
答案 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
)