使用嵌套选择查询的MySQL删除

使用嵌套选择查询的MySQL删除,mysql,sql-delete,Mysql,Sql Delete,我有以下MySQL查询: DELETE FROM catalogue WHERE catalogue_id IN ( SELECT catalogue_id FROM catalogue WHERE ( product_id = (SELECT product_id FROM catalogue WHERE catalogue_id = '2290') AND length_id = (SELECT length_id FROM catalogue WHERE

我有以下MySQL查询:

DELETE FROM catalogue 
WHERE catalogue_id IN (
  SELECT catalogue_id 
  FROM catalogue 
  WHERE (
    product_id = (SELECT product_id FROM catalogue WHERE catalogue_id = '2290') 
    AND length_id = (SELECT length_id FROM catalogue WHERE catalogue_id = '2290') 
    AND gauge_id = (SELECT gauge_id FROM catalogue WHERE catalogue_id = '2290')
  )
)
但当我尝试执行时,会收到以下错误消息:

无法在FROM子句中指定更新的目标表“目录”

有人能告诉我哪里出了问题吗?

执行双重嵌套

DELETE FROM catalogue 
WHERE catalogue_id IN (SELECT catalogue_id FROM (
  SELECT catalogue_id 
  FROM catalogue 
  WHERE (
    product_id = (SELECT product_id FROM catalogue WHERE catalogue_id = '2290') 
    AND length_id = (SELECT length_id FROM catalogue WHERE catalogue_id = '2290') 
    AND gauge_id = (SELECT gauge_id FROM catalogue WHERE catalogue_id = '2290')
  )) x
)

它愚弄了mysql,或者您可以使用临时表:

  CREATE TEMPORARY TABLE t AS
  SELECT catalogue_id 
  FROM catalogue 
  WHERE (
    product_id = (SELECT product_id FROM catalogue WHERE catalogue_id = '2290') 
    AND length_id = (SELECT length_id FROM catalogue WHERE catalogue_id = '2290') 
    AND gauge_id = (SELECT gauge_id FROM catalogue WHERE catalogue_id = '2290')
  );

  DELETE FROM catalogue WHERE catalogue_id IN (SELECT catalogue_id FROM t);

通过查询,您得到了
您不能在FROM子句中指定更新的目标表'catalog',因为您不能在一个查询中对同一个表进行选择和更新。

在zerkms中工作得很好,但是必须“愚弄”MySQL的原因是什么?如果您有多个
WHERE
列,该怎么办?i、 e.
从目录中删除目录id和目录名称所在的目录。
@ThreaT:我不知道你在问什么。可以使用
ADD
添加多个谓词,是的。您将如何更改答案以使用
ADD
?已经9年了,仍然需要这种黑客技术。感谢Kamil的解释。