【问题标题】:Why does this DELETE query fail when the equivalent SELECT works?当等效的 SELECT 起作用时,为什么这个 DELETE 查询会失败?
【发布时间】:2012-05-12 23:58:36
【问题描述】:

我有两个表,products(product_id) 和 sex(product_id,sex_id)。我正在尝试从具有 product_id 的两个表中删除行,以便在 sex 表中存在具有此 product_id 和 sex=1 的行。到目前为止我有

CREATE TEMPORARY TABLE tempTable
      SELECT p.product_id  
        FROM products AS p
  INNER JOIN sex AS s
          ON p.product_id = s.product_id 
       WHERE s.sex = 1;

 DELETE FROM products AS p
NATURAL JOIN tempTable AS t

DELETE 查询抛出此错误:

#1064 - 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 'NATURAL JOIN tempTable AS t' at line 2

这个 SELECT 查询工作正常:

SELECT * FROM products
NATURAL JOIN tempTable

为什么 SELECT 查询有效,而 DELETE 查询无效?

【问题讨论】:

  • 我不是 mysql 专家,但是您的 AS pAS t 别名在 DELETE 查询中似乎没有意义。如果你删除它们,它会工作吗?
  • @JoeWhite 为什么它们没有意义?如果你有的话,你可以在WHERE 中使用它们。或者(见我的回答)指定DELETE 应该出现在哪个表中。

标签: mysql sql mysql-error-1064


【解决方案1】:

因为DELETE 有一个different syntax。您必须指定要从哪些表中删除。

其中之一也是如此

DELETE p, t FROM products AS p NATURAL JOIN tempTable AS t;
DELETE p FROM products AS p NATURAL JOIN tempTable AS t;
DELETE t FROM products AS p NATURAL JOIN tempTable AS t;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-17
    • 1970-01-01
    • 1970-01-01
    • 2011-09-01
    • 2011-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多