mysql多表DELETE行语法错误

时间:2014-07-22 09:15:59

标签: mysql

怎么来这个查询:

select * FROM `store_catalog_product_option` JOIN `store_catalog_product_option_type_value` WHERE `product_id`=15676 AND `store_catalog_product_option_type_value`.`sku` LIKE '%UNIT_%' 

检索数据

但替换

  select * 

  delete 

就是这样

   delete FROM `store_catalog_product_option` JOIN `store_catalog_product_option_type_value` WHERE `product_id`=15676 AND `store_catalog_product_option_type_value`.`sku` LIKE '%UNIT_%'

给出语法错误:

  

SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法中有错误;检查与您的MySQL服务器版本相对应的手册,以便在&JOH; store_catalog_product_option_type_value WHERE product_id = 15676 AND`sto'附近使用正确的语法。在第1行

4 个答案:

答案 0 :(得分:2)

你的JOIN应该有一个ON部分

答案 1 :(得分:1)

对于multi-table deletes

  

对于第一个多表语法,仅删除FROM子句之前列出的表中的匹配行。第二个多表语法,只删除FROM子句(USING子句之前)中列出的表中的匹配行。

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

或者:

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

对于LEFT JOIN,您应该使用类似

的内容
DELETE t1 FROM t1 LEFT JOIN t2 ON t1.id=t2.id WHERE t2.id IS NULL;

答案 2 :(得分:1)

您可以尝试这样的事情: -

DELETE FROM `store_catalog_product_option` A
JOIN `store_catalog_product_option_type_value' B
ON A.ID = B.ID
WHERE A.`product_id`=15676 
AND B.`sku` LIKE '%UNIT_%'

或者您可以使用: -

DELETE A
FROM `store_catalog_product_option` A
JOIN `store_catalog_product_option_type_value' B
ON A.ID = B.ID
WHERE A.`product_id`=15676 
AND B.`sku` LIKE '%UNIT_%'

...仅从store_catalog_product_option

删除

答案 3 :(得分:0)

我确实需要使用多表语法,包括JOIN的ON条件。

由于我想删除两个表中的行,这是我的工作查询,在您的帮助之后:

 DELETE O, V FROM `store_catalog_product_option` O JOIN `store_catalog_product_option_type_value` V on O.option_id=V.option_id WHERE `product_id`=15676 AND V.`sku` LIKE '%UNIT_%'