0

我有 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
                              )

这是解决问题的正确方法吗?

我在这里发现了一个类似的问题:(根据另一个表中的数据更新一个 SQL 表)但不清楚它是否会在他们的示例中选择性地更新表 A,或者表 A 中的所有记录。


更新:我修正了上面的错字,但它仍然不起作用。当我运行查询时,有 0 行受到影响。

4

4 回答 4

0

如果在此夜间进程运行后删除了 sales 表,那么这应该可以工作

Update m Set
   Sold = sold + 
     (Select Count(*) From Sales
      Where SalesmanId = m.SalesmanId) 
From Salesman m
于 2013-06-15T14:59:10.827 回答
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 小提琴

于 2013-06-15T14:55:43.003 回答
0

是的,它是对的,你的查询只是改变这个

 WHERE SALESAN.SALESMANID 

 WHERE SALESMAN.SALESMANID 

你的演示

  • 我不知道你为什么在问问题之前没有自己尝试。
于 2013-06-15T14:55:51.373 回答
0
INSERT INTO SALESMAN (SALESMANID, SOLD) (SELECT SALEMANID, COUNT(*) as c FROM SOLD GROUP BY SALEMANID) ON DUPLICATE KEY UPDATE SOLD = c

您可能需要命名选择并使用 .c

于 2013-06-15T14:57:41.670 回答