问题
I want to achieve the following:
Current State of table (my_table)
id totalX totalY totalZ
--------- -------------- -------------- --------------
9 34 334 0
10 6 56 0
11 21 251 0
12 3 93 0
Query result of (my_table2)
select id,count(*) as total FROM my_table2 WHERE column_2 = 1 GROUP BY id
id total
--------- --------------
9 500
10 600
11 700
12 800
Expected State of table (my_table)
id totalX totalY totalZ
--------- -------------- -------------- --------------
9 34 334 500
10 6 56 600
11 21 251 700
12 3 93 800
Can this be done in ONE update query ? I am looking for Sybase ASE 12.5 on a RHEL 5.0
EDIT: I coudn't find the solution for Sybase, but the current answer to the question works on MS SQL Server..
回答1:
update
my_table
set
my_table.totalZ = t.total
FROM
my_table mt
INNER JOIN
(select id,count(*) as total
FROM my_table2
WHERE column_2 = 1 GROUP BY id) t
on mt.id = t.id
UPDATE In MS SQL Server this is what you would do. The OP noted this doesn't work in Sybase.
回答2:
something like this should do the trick
update my_table
set my_table.totalZ = (select count(*) from my_table2 where my_table.id = my_table2.id and my_table2.column_2 = 1);
回答3:
It looks like Sybase supports joins with updates:
http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.dc20023_1251/html/optimizer/optimizer133.htm
来源:https://stackoverflow.com/questions/3779786/update-table-with-a-select-query-with-a-where-clause