MySQL更新一个表中的多行
我有3个表,一个包含商店产品,一个包含客户列表,一个通过保存数量、产品ID和客户ID绘制购买的产品和客户之间的关系的表,这两个表都是各自表中的键 我想写一个声明,其中我可以将“Sideshow”(客户表中的名字)购买的每个产品的product表中NumberOfItemsOn的值更新为20 我试着用下面的语句:MySQL更新一个表中的多行,mysql,Mysql,我有3个表,一个包含商店产品,一个包含客户列表,一个通过保存数量、产品ID和客户ID绘制购买的产品和客户之间的关系的表,这两个表都是各自表中的键 我想写一个声明,其中我可以将“Sideshow”(客户表中的名字)购买的每个产品的product表中NumberOfItemsOn的值更新为20 我试着用下面的语句: +-----------+---------------+-------------+---------------------+ | ProductID | Description
+-----------+---------------+-------------+---------------------+
| 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行”,我不知道如何以另一种方式执行它
内部联接来更有效地解决此问题
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")
);