MySQL更新一个表中的多行

MySQL更新一个表中的多行,mysql,Mysql,我有3个表,一个包含商店产品,一个包含客户列表,一个通过保存数量、产品ID和客户ID绘制购买的产品和客户之间的关系的表,这两个表都是各自表中的键 我想写一个声明,其中我可以将“Sideshow”(客户表中的名字)购买的每个产品的product表中NumberOfItemsOn的值更新为20 我试着用下面的语句: +-----------+---------------+-------------+---------------------+ | ProductID | Description

我有3个表,一个包含商店产品,一个包含客户列表,一个通过保存数量、产品ID和客户ID绘制购买的产品和客户之间的关系的表,这两个表都是各自表中的键

我想写一个声明,其中我可以将“Sideshow”(客户表中的名字)购买的每个产品的product表中NumberOfItemsOn的值更新为20

我试着用下面的语句:

+-----------+---------------+-------------+---------------------+
| ProductID | Description   | CostPerItem | NumberOfItemsOnHand |
+-----------+---------------+-------------+---------------------+
| 11        | Bike          |         150 |                 200 |
| 12        | Socks         |           2 |                 100 |
| 55        | Bicycle       |         150 |                 120 |
| 66        | Elbow pads    |          14 |                 120 |
| 78        | Knee Pads     |          12 |                  70 |
| 88        | Roller Blades |          75 |                  89 |
| 99        | Helmet        |          29 |                  30 |
+-----------+---------------+-------------+---------------------+

+------------+-----------+------------+-------------+-------------+---------+
| CustomerID | FirstName | LastName   | City        | PhoneNumber | AgentID |
+------------+-----------+------------+-------------+-------------+---------+
| 10         | Barney    | Rubble     | Bedrock     |        -457 | NULL    |
| 12         | Monty     | Burns      | Springfield |         789 | NULL    |
| 13         | Wonder    | Woman      | Kypto       |        -346 | NULL    |
| 14         | Peter     | Griffens   | Providence  |       -3580 | NULL    |
| 15         | Fred      | Flintstone | Bedrock     |       -1568 | NULL    |
| 21         | Homer     | Simpson    | Springfield |       -8270 | NULL    |
| 31         | Sideshow  | Bob        | Springfield |       -4869 | NULL    |
+------------+-----------+------------+-------------+-------------+---------+

+----------+-----------+------------+
| Quantity | ProductID | CustomerID |
+----------+-----------+------------+
|       20 | 99        | 21         |
|       14 | 12        | 21         |
|       10 | 66        | 21         |
|        1 | 99        | 31         |
|        2 | 12        | 31         |
|        4 | 78        | 31         |
|        2 | 66        | 31         |
|        2 | 66        | 15         |
|        2 | 78        | 15         |
|       19 | 66        | 14         |
+----------+-----------+------------+
我收到一个错误,说“子查询返回超过1行”,我不知道如何以另一种方式执行它
  • 您可以使用
    内部联接来更有效地解决此问题
  • 使用适当的关系连接所有表,只考虑其中的代码“>代码>客户机.FieldNe=“SIDESWORD”,并更新相应的产品<代码> No.ObjyOfTimeSoNo.< /Cord> Value.< 请尝试以下查询:

    UPDATE Product x
       SET x.NumberOfItemsOnHand = 20 
     WHERE x.ProductID = 
        (SELECT ProductID from BoughtBy WHERE BoughtBy.CustomerID = 
           (SELECT CustomerID FROM Customer WHERE FirstName = "Sideshow")
        );
    
    您是否尝试过:

    UPDATE Product AS p
    JOIN BoughtBy AS b 
      ON b.ProductId = p.productID 
    JOIN Customer AS c 
      ON c.CustomerID = b.CustomerID AND 
         c.FirstName = "Sideshow"
    SET p.NumberOfItemsOnHand = 20 
    
    UPDATE Product x
       SET x.NumberOfItemsOnHand = 20 
     WHERE x.ProductID IN 
        (SELECT ProductID from BoughtBy WHERE BoughtBy.CustomerID IN
           (SELECT CustomerID FROM Customer WHERE FirstName = "Sideshow")
        );