SQL更新 - 基于表之间的匹配值自动更新行

时间:2012-02-23 04:05:01

标签: sql sql-server sql-server-2008

我想用每个特定accountId的新最低价格更新table1。

我的查询有效,我只是想自动化它,这样我就不必为每个查询复制/粘贴accountId。

表1

client  accountId  price    
------------------------
John    1234       5000
Joe     12345      7000
Mary    123456     8000

表2

client  accountId  soldprice    
------------------------
John    1234       9000
Joe     22345      20000
Joe     22345      3000
Mary    0234       8000
Mary    0234       1000

代码:

UPDATE table1
   SET price = (SELECT MIN(soldPrice) 
                  FROM table2 
                 WHERE accountId = '22345')
 WHERE accountID = '22345'

3 个答案:

答案 0 :(得分:2)

这应该可以解决问题。 SQL alias用于子查询。

UPDATE table1
   SET price = (SELECT MIN(soldPrice) 
                  FROM table2 t2
                 WHERE t2.accountId=table1.accountID)

答案 1 :(得分:1)

使用表别名:

UPDATE table1
   SET price = (SELECT MIN(t2.soldPrice) 
                  FROM table2 t2
                 WHERE t2.accountId = table1.accountid)

UPDATE语句不允许您指定表别名,除非在FROM子句中:

UPDATE t1
   SET price = (SELECT MIN(t2.soldPrice) 
                  FROM table2 t2
                 WHERE t2.accountId = t1.accountid)
 FROM table1 t1

但是这个语法并不像第一个例子那样受到广泛支持。

答案 2 :(得分:1)

使用CTE的方法略有不同。

;WITH m (accountid, price) AS 
(
  SELECT accountid, MIN(soldprice)
    FROM dbo.table2
    GROUP BY accountid
)
UPDATE t SET t.price = m.price
  FROM dbo.table1 AS t 
  INNER JOIN m ON t.accountid = m.accountid;