【问题标题】:SQL UPDATE with INNER JOIN使用 INNER JOIN 进行 SQL 更新
【发布时间】:2013-01-07 14:25:22
【问题描述】:

我正在尝试使用此查询

UPDATE products  
SET products.product_price = '87.00000'
FROM products
INNER JOIN product_category
ON products.product_id = product_category.product_id 
WHERE product_category.category_id = '64'

但是我收到此错误:#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 'FROM table products INNER JOIN table product_category ON prod' at line 3

我没有看到任何语法错误。我从这个论坛上的例子中提出了这个问题。

【问题讨论】:

标签: mysql sql inner-join


【解决方案1】:

删除FROM products 行。 并把 SET ... 行就在 WHERE 子句之前。

要清楚:

UPDATE ...
JOIN ...
SET ...
WHERE ...

你也可以

UPDATE products p
SET p.product_price='87.00000'
WHERE EXISTS (SELECT NULL 
              FROM product_category pc
              WHERE p.product_id = pc.product_id
              AND pc.category_id = '64');

【讨论】:

    【解决方案2】:

    您可以使用以下内容:

    UPDATE products 
    INNER JOIN product_category
      ON products.product_id = product_category.product_id 
    SET products.product_price = '87.00000'
    WHERE product_category.category_id = '64';
    

    SQL Fiddle with Demo

    【讨论】:

      【解决方案3】:

      我认为 SET 子句需要在表引用之后和 WHERE 子句之前,像这样:

      UPDATE products
       INNER
        JOIN product_category
          ON products.product_id = product_category.product_id 
         SET products.product_price = '87.00000'
       WHERE product_category.category_id = '64'
      

      当我需要这样的 UPDATE 时,我如何获得该语法。我总是从一个 select 语句开始,它让我知道哪些行将被更新。例如:

      SELECT p.*, c.*
        FROM products p
        JOIN product_category c
          ON p.product_id = c.product_id 
       WHERE c.category_id = '64'
      

      要将其转换为更新语句,我在表引用之后和WHERE 子句之前添加了一个“SET”子句,然后将“SELECT ... FROM”替换为“UPDATE”关键字。瞧。

      【讨论】:

        【解决方案4】:
        UPDATE products
        INNER JOIN product_category
        ON products.product_id = product_category.product_id 
        SET products.product_price = '87.00000'
        WHERE product_category.category_id = '64'
        

        【讨论】:

          猜你喜欢
          • 2020-03-20
          • 2021-02-04
          • 2015-07-29
          • 1970-01-01
          • 2014-11-30
          • 2016-12-27
          • 1970-01-01
          • 2017-01-16
          • 1970-01-01
          相关资源
          最近更新 更多