SQL - 更新多个表,其中内部联接值来自第三表

时间:2016-11-29 16:52:17

标签: mysql sql

在MySQL数据库中,我的表格标有以下内容:

Table:catalog_product_entity
|-------------------------|
|entity_id | sku          |  
|-------------------------|
|5         | 094922562333 |
|6         | 087454664234 |
|7         | 054545789548 |
---------------------------

Table:catalog_product_entity_decimal
|-------------------------|
|entity_id | price        |  
|-------------------------|
|5         | 39.99        |
|6         | 37.92        |
|7         | 5.99         |
---------------------------

Table: cataloginventory_stock_item
|-------------------------|
|entity_id | qty          |  
|-------------------------|
|5         | 0            |
|6         | 5            |
|7         | 8            |
---------------------------

我正在连接另一个只能提供SKU的数据库。我想使用SKU作为INNER JOIN来使用entity_id通过一个查询来更新表。

这是我到目前为止的查询(获取语法错误):

UPDATE catalog_product_entity_decimal, cataloginventory_stock_item
SET catalog_product_entity_decimal.value ='37.95',                                                          
cataloginventory_stock_item.qty ='4'
INNER JOIN catalog_product_entity 
ON catalog_product_entity.entity_id = catalog_product_entity_decimal.entity_id
WHERE catalog_product_entity.sku = '094922562333';

1 个答案:

答案 0 :(得分:2)

JOINUPDATE声明的一部分,而不是SET之后的部分。所以你可以试试:

UPDATE catalog_product_entity_decimal cped JOIN
       catalog_product_entity cpe
       ON cpe.entity_id = cped.entity_id JOIN
       cataloginventory_stock_item csi
       ON csi.entity_id = cpe.entity_id
    SET cped.value = 37.95,                                                          
        csi.qty = 4
    WHERE cpe.sku = '094922562333';

注意:

  • JOIN符号位于UPDATE子句中。
  • 表别名使查询更易于编写和阅读。
  • JOIN需要cataloginventory_stock_item
  • 数字周围不需要单引号。