这可能被标记为重复,但我无法在搜索中找到此示例。
我有一个产品到类别表,允许重复键,因此允许按ID分类产品。我有一种情况,数千种产品被错误地放在一个类别中。如果产品被分配到“动作人物”和“漫画”,则“漫画”分配是错误的。
我正在尝试编写单个MYSQL查询,如果检测到具有重复键和“Action Figures”的指定值的行,则该查询将删除行。另一种说法:如果产品被分配到两个类别,那么我想删除将其分配给错误类别的行。
我似乎无法找出一个删除语句,可以按照我想要的方式在ID中搜索同一个表。
这是我到目前为止所做的事情(编辑 - 感谢下面的答案):
DELETE FROM oc_product_to_category c1
WHERE c1.category_id = '25'
AND EXISTS(
SELECT * FROM oc_product_to_category c2
WHERE c1.product_id = c2.product_id AND c2.category_id = '24')
不幸的是,这产生了语法错误。
You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for the right syntax to use near
'c1
WHERE c1.category_id = '25'
AND EXISTS (
SELECT * FROM oc_product_to_catego' at line 1
当我尝试语法
时DELETE c1 FROM oc_product_to_category c1 ...
我收到错误:
You can't specify target table 'c1' for update in FROM clause
答案 0 :(得分:0)
这应该让你开始。如果为category_id 25和33分配了ID,它将删除类别为25的记录。
DELETE c1 FROM oc_product_to_category as c1
WHERE c1.category_id = '25'
AND EXISTS (
SELECT id FROM (SELECT * FROM oc_product_to_category) as c2
WHERE c1.id = c2.id AND c2.category_id = '33'
)
请注意,如果存在category_id 33,则不会删除重复记录。