我想用每个特定accountId的新最低价格更新table1。
我的查询有效,我只是想自动化它,这样我就不必为每个查询复制/粘贴accountId。
client accountId price
------------------------
John 1234 5000
Joe 12345 7000
Mary 123456 8000
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'
答案 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;