我想实现以下目标:
表格的当前状态(my_table)
id totalX totalY totalZ
--------- -------------- -------------- --------------
9 34 334 0
10 6 56 0
11 21 251 0
12 3 93 0
查询(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
表格的预期状态(my_table)
id totalX totalY totalZ
--------- -------------- -------------- --------------
9 34 334 500
10 6 56 600
11 21 251 700
12 3 93 800
这可以在一个更新查询中完成吗?我在RHEL 5.0上寻找Sybase ASE 12.5
编辑:我找不到Sybase的解决方案,但目前这个问题的答案适用于MS SQL Server ..
答案 0 :(得分:10)
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
更新在MS SQL Server中,您将这样做。 OP指出这在Sybase中不起作用。
答案 1 :(得分:2)
这样的事情应该可以解决问题
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);
答案 2 :(得分:0)
看起来Sybase支持与更新的连接:
答案 3 :(得分:0)
最好和更可靠的方法是使用MERGE。
MERGE INTO my_table
USING (select id,count(*) as total FROM my_table2 WHERE column_2 = 1 GROUP BY id) t2
ON (my_table.id=t2.id)
WHEN MATCHED THEN
UPDATE SET totalZ = t2.total