2015-05-29 50 views
0

在我的other question我问如何从多个表中选择一个列与内部联接。我的新问题是:如何删除这些结果?如果要修改,你可以通过创建执行它相同的查询从manual删除多个连接

Currently, you cannot delete from a table and select from the same table in a subquery.

SELECT 
product_image.image 
FROM product 
INNER JOIN ixml_prd_map ON product.sku = ixml_prd_map.id_oc_prd 
INNER JOIN product_image ON product_image.product_id = product.product_id 
WHERE product.model = "xy-type" 

回答

1

您可以使用此查询

DELETE FROM product_image WHERE product_image_id IN (SELECT 
product_image.image 
FROM product 
INNER JOIN ixml_prd_map ON product.sku = ixml_prd_map.id_oc_prd 
INNER JOIN product_image ON product_image.product_id = product.product_id 
WHERE product.model = "xy-type") 

编辑一个临时表(h ERE其resultset

DELETE FROM product_image WHERE product_image_id IN (SELECT resultset.product_image_id FROM (SELECT 
    product_image.product_image_id 
    FROM product 
    INNER JOIN ixml_prd_map ON product.sku = ixml_prd_map.id_oc_prd 
    INNER JOIN product_image ON product_image.product_id = product.product_id 
    WHERE product.model = "xy-type") AS resultset) 

或者您可以使用USING像这样的例子从MySQL手册, 13.2.2 DELETE Syntax。我没有使用过USING,但你可以定义签出。

DELETE FROM t1, t2 USING t1 
INNER JOIN t2 
INNER JOIN t3 
WHERE t1.id=t2.id AND t2.id=t3.id;  

而且这个SO帖子将帮助太MySQL Error 1093 - Can't specify target table for update in FROM clause

+0

由于某种原因,我收到错误如上所示:#1093 - 您无法在FROM子句 – Adrian

+0

中指定目标表'product_image'进行更新我相信它是因为在mysql中,您无法更新表并从子查询中的同一个表中选择'当前不能删除从一个表中选择并从子查询中的同一个表中选择。 ':从手册https://dev.mysql.com/doc/refman/5.0/en/delete.html –

+0

嗯。我会手动删除,但有超过30000结果。 :( – Adrian

2

如果你想只从产品,那么下面的删除应该做的工作

delete p from product p 
INNER JOIN ixml_prd_map ipm ON p.sku = ipm.id_oc_prd 
INNER JOIN product_image pi ON pi.product_id = p.product_id 
WHERE p.model = "xy-type" 

但如果您需要删除所有表匹配加入条件然后使用

delete p,ipm,pi from product p 
INNER JOIN ixml_prd_map ipm ON p.sku = ipm.id_oc_prd 
INNER JOIN product_image pi ON pi.product_id = p.product_id 
WHERE p.model = "xy-type" 
+0

我只想删除匹配的“product_image.image”。 – Adrian

+0

是的,在第一种情况下,删除将通过匹配连接子句和条件在产品表上发生,第二种情况下删除将从所有表中删除。您可以使用哪一个方便您。 –