Mysql 使用where not in进行Sql更新
我在表ps_product_lang中有这些信息:Mysql 使用where not in进行Sql更新,mysql,sql-update,Mysql,Sql Update,我在表ps_product_lang中有这些信息: id_product id_lang 1 1 1 2 1 3 2 1 3 1 4 1 5 1 5 2 5 3 输出应该是 id_product id_lang 1 1 1 2 1 3 2
id_product id_lang
1 1
1 2
1 3
2 1
3 1
4 1
5 1
5 2
5 3
输出应该是
id_product id_lang
1 1
1 2
1 3
2 2
3 2
4 2
5 1
5 2
5 3
我想更新具有唯一id_产品的记录,id_lang应为1,这意味着涉及第4、第5和第6条记录:
我尝试了这个查询,但不起作用
UPDATE `ps_product_lang` p
SET p.`id_lang` = '2'
WHERE p.`id_lang` = '1'
AND p.id_product NOT IN (SELECT `id_product`
FROM `ps_product_lang` ps
WHERE p.id_product = ps.id_product
AND ps.id_lang = '2');
你的要求有矛盾之处:
p.id_product not in
反对
p.id_product= ps.id_product
你的要求有矛盾之处:
p.id_product not in
反对
p.id_product= ps.id_product
在制作时执行此操作,但只需进行内部选择
UPDATE `ps_product_lang`
SET `id_lang` = '2'
WHERE `id_lang` = '1'
AND id_product NOT IN (select `id_product` from (SELECT `id_product`
FROM `ps_product_lang`
WHERE id_product = id_product
AND id_lang = '2')t );
在制作时执行此操作,但只需进行内部选择
UPDATE `ps_product_lang`
SET `id_lang` = '2'
WHERE `id_lang` = '1'
AND id_product NOT IN (select `id_product` from (SELECT `id_product`
FROM `ps_product_lang`
WHERE id_product = id_product
AND id_lang = '2')t );
您可以尝试以下方法:
UPDATE `ps_product_lang` p
INNER JOIN (
SELECT id_product
FROM ps_product_lang
GROUP BY id_product
HAVING COUNT(*) = 1
) b ON b.id_product = p.id_product
SET p.`id_lang` = '2'
WHERE p.`id_lang` = '1'
内部查询仅获取具有唯一product_id的行,并更新id_lang=1的行。您可以尝试以下操作:
UPDATE `ps_product_lang` p
INNER JOIN (
SELECT id_product
FROM ps_product_lang
GROUP BY id_product
HAVING COUNT(*) = 1
) b ON b.id_product = p.id_product
SET p.`id_lang` = '2'
WHERE p.`id_lang` = '1'
内部查询只获取具有唯一product_id的行,而更新id_lang=1的行。不清楚您到底想要做什么……不清楚您想要做什么。阅读您的问题我认为您缺少或提供了错误的信息。我想更新id_lang为1且具有唯一id的记录表中的id_产品不清楚您到底想要做什么…不清楚您想要什么。阅读您的问题我认为您缺少或提供了错误的信息。我想更新具有id_lang 1且表中具有唯一id_产品的记录MySQL在更新WHERE in()时存在非常糟糕的性能问题。您应该始终使用更新内部连接!MySQL在更新WHERE IN()时存在非常糟糕的性能问题。您应该始终使用更新内部连接!