【问题标题】:SQL Delete with SELECT使用 SELECT 删除 SQL
【发布时间】:2014-02-10 12:37:12
【问题描述】:

我有以下选择查询:

SELECT opt.product_option_id 
FROM  `oc_product_option_value` AS opt_val,  `oc_product_option` AS opt
WHERE  `opt`.`product_option_id` =  `opt_val`.`product_option_id` 
AND  `opt_val`.`price` =  '0.0000'

我认为我可以在 delete 查询中使用它:

DELETE oc_product_option, oc_product_option_value FROM oc_product_option 
INNER JOIN oc_product_option_value

WHERE  `oc_product_option`.`product_option_id` =  `oc_product_option_value`.`product_option_id` 
AND  `oc_product_option_value`.`price` =  '0.0000'

但这删除了oc_product_option 中的所有行。那我做错了什么?

【问题讨论】:

  • oc_product_option 中的所有东西的价格都是 '0.0000' 是我的第一个猜测。
  • @GordonLinoff,这不是真的。 oc_product_option 中没有 price 表。在第二张表(oc_product_option_value)中,确实有0.0000的价格,但也有一些价格为0.8260...
  • Your code works fine。我唯一的猜测是戈登的第一个。
  • @Mathlight 。 . .那将是oc_product_option_value 表。另一种选择是您只运行查询的前两行或前三行,而不是全部四行。

标签: mysql sql select sql-delete


【解决方案1】:

你可以试试这个吗?

DELETE t1 FROM oc_product_option t1
JOIN oc_product_option_value t2
WHERE  `t1`.`product_option_id` =  `t2`.`product_option_id` 
AND  `t2`.`price` =  '0.0000'

是否有意删除两个表的行?

【讨论】:

  • 如果你想从两个表中删除,只需在 DELETE 语法之后命名它们即可。
【解决方案2】:

你做了一个循环依赖,这就是你得到这个结果的原因

下面的查询应该只删除 oc_product_option 中具有 id 且价格为零的行。 或者您必须使用另一个标准在 oc_product_option 中定义 id 范围来过滤 oc_product_option 表

DELETE FROM oc_product_option o
 WHERE  o.product_option_id in (SELECT opt.product_option_id FROM oc_product_option_value
                                 where `oc_product_option_value`.`price` =  '0.0000')

【讨论】:

  • 您不能在子查询中使用要从中删除的同一个表。我认为这会导致错误。
  • 查询没有任何意义
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-06
  • 1970-01-01
  • 2021-10-21
  • 1970-01-01
  • 2021-07-17
相关资源
最近更新 更多