I'm wondering about the following query:
UPDATE statisticsTable
SET Value = (select count(*)
FROM OtherTable o
WHERE o.UserId = UserId ) <-- this is the part that concerns me
WHERE id in (1,2,3)
How does SQL Server know that the second "UserId" field comes from statisticsTable
and not from OtherTable
? Why can't I give an alias to statisticstable like 'stat' to clarify where I want to get that UserId? Or is there a way?
SQL Server supports updates using joins.
This means you can write your query like this:
UPDATE s
SET Value = d.NumOfRows
FROM statisticsTable s
INNER JOIN
(
SELECT UserId, COUNT(*) As NumOfRows
FROM OtherTable
GROUP BY UserId
) d ON s.UserId = d.UserId
WHERE id in (1,2,3)
Try this:
UPDATE s
SET Value = x.cnt
from statisticsTable s
outer apply (select count(*) as cnt
FROM OtherTable o
WHERE o.UserId = s.UserId ) x
WHERE s.id in (1,2,3)
An alias for the table you are updating is not allowed but you can use the table name in the normal way:
UPDATE statisticsTable
SET Value = (select count(*)
FROM OtherTable o
WHERE o.UserId = statisticsTable.UserId )
WHERE id in (1,2,3)
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.