我有2张桌子(SALESMAN,SOLD),其中SALES表记录了每天售出的汽车。在晚上运行的作业必须增加SALESMAN表中的SOLD计数。例如,这是两个表:
SALESMAN SALES
+-------------+-----------+------+ +------------+---------+
| SALESMANID | NAME | SOLD | | SALESMANID | VEHICLE |
| 1 | Bob | 1 | | 1 | GM |
| 2 | Charlie | 7 | | 1 | Chrys |
| 3 | Dave | 0 | | 1 | GM |
+-------------+-----------+------+ | 3 | Dodge |
| 3 | GM |
| 2 | Hummer |
+------------+---------+
在UPDATE运行之后,Bob的销售数量将增加到4,Charlie的销售数量将增加到8,而Dave的销售数量将增加到2.我正在尝试创建类似的东西:
UPDATE SALESMAN SET SOLD=SOLD+(
SELECT COUNT(*)
FROM SALES
WHERE SALESMAN.SALESMANID = SALES.SALESMANID
)
这是解决问题的正确方法吗?
我在这里找到了一个类似的问题:( Updating one SQL table based on data in another table)但是不清楚它是否会有选择地更新其示例中的表A或表A中的所有记录。
更新:我修正了上面的拼写错误,但它仍然无效。运行查询时影响了0行。
答案 0 :(得分:0)
UPDATE SALESMAN a,
(SELECT SALESMANID, COUNT(*) SALE_COUNT
FROM SALES
group by SALESMANID) b
set a.SOLD=a.SOLD+ b.SALE_COUNT
WHERE a.SALESMANID = b.SALESMANID;
请参阅SQL Fiddle
答案 1 :(得分:0)
是的,你的查询只是改变了这个
WHERE SALESAN.SALESMANID
到
WHERE SALESMAN.SALESMANID
答案 2 :(得分:0)
INSERT INTO SALESMAN (SALESMANID, SOLD) (SELECT SALEMANID, COUNT(*) as c FROM SOLD GROUP BY SALEMANID) ON DUPLICATE KEY UPDATE SOLD = c
您可能需要命名选择并使用.c
答案 3 :(得分:0)
如果在每晚进程运行后删除销售表,那么这应该有效
Update m Set
Sold = sold +
(Select Count(*) From Sales
Where SalesmanId = m.SalesmanId)
From Salesman m