2013-03-26 65 views
0
UPDATE 
    TABLE_1 
SET 
    COL_1 = (
      SELECT 
       SUM(TOT) 
      FROM 
       TABLE_2 
      ) 
WHERE 
    CUST_NO = TABLE_2.CUST_NO 

因此,这是我的SQL到目前为止。实质上,我试图将TABLE_1中的COL_1更新为TABLE_2中存储的TOT的总和。我正试图在这两个表的CUST_NO上进行更新。SQL更新多行

我知道我的代码根本不起作用,但我真的不知道该怎么做。

所以从TABLE_1一排的一个例子之前,我跑我的SQL是:

|CUST_NO |COL_1| 
|1000 |null | 
|1001 |null | 

而且TABLE_2:

|CUST_NO |TOT | 
|1000 |15 | 
|1000 |17 | 
|1001 |13 | 
|1001 |12 | 

而我最终想/需要:

TABLE_1 :

|CUST_NO |COL_1| 
|1000 |32 | 
|1001 |25 | 
+1

请通过添加适当的标记(Oracle,SQL Server,MySQL等)来指定您要定位的RDBMS。可能会有利用不被普遍支持的语言或产品功能的答案。此外,通过为特定的RDBMS添加标签,您的问题可能会从更适合回答的人那里得到关注 – Taryn 2013-03-26 18:11:20

回答

3

这可能是你想要的:

UPDATE TABLE_1 
    SET COL_1 = (SELECT SUM(TOT) 
       FROM TABLE_2 
       WHERE table_1.CUST_NO = TABLE_2.CUST_NO  
       ) 

这假设你想改变所有的行。否则,试试这个:

UPDATE TABLE_1 
    SET COL_1 = (SELECT SUM(TOT) 
       FROM TABLE_2 
       WHERE table_1.CUST_NO = TABLE_2.CUST_NO  
       ) 
where exists (select 1 from table_2 WHERE table_1.CUST_NO = TABLE_2.CUST_NO) 

只需更改其中table1的客户数​​都在表2

根据不同的数据库上,可能有其他的方式来表达此行。但是,这种语法应该适用于大多数数据库。

+0

这太棒了!非常感谢。 – 2013-03-26 18:46:31