我正在尝试使用另一个表(house)中的计数更新一个表(街道)中的某些记录。我正在尝试使用该街道上正确数量的房屋更新街道表中的house_count。我只想更新不正确的记录。我能用MSSQL使用下面的代码:
CREATE TABLE street
(
name varchar(255),
house_count int
);
Create table house
(
id varchar(255),
street_name varchar(255)
);
insert into street values ('oak',1)
insert into street values ('maple',2)
insert into street values ('birch',4)
insert into street values ('walnut',1)
insert into house values (1,'oak')
insert into house values (2,'oak')
insert into house values (1,'maple')
insert into house values (2,'maple')
insert into house values (1,'birch')
insert into house values (2,'birch')
insert into house values (3,'birch')
insert into house values (1,'walnut')
update s set s.house_count= hc.ActualCount
from street s
inner join
(select s.name, count(s.name) as 'ActualCount', s.house_count
from street s
inner join house h on s.name=h.street_name
group by s.name, s.house_count
having count(s.name) <> s.house_count) hc ON s.name=hc.name
where s.name=hc.name
我需要在Oracle中做类似的事情,但遇到了问题。从我发现的连接在Oracle中是不可能的,但我很难得到一些有用的东西。任何有助于在Oracle中使用此功能的帮助都非常感谢。
由于
答案 0 :(得分:1)
您可以使用相关子查询执行此操作:
update street
set house_count = (select count(s.name)
from house h
where street.name = h.street_name
);
这与您的方法略有不同,因为即使计数没有变化,它也会更新所有街道。在尝试阻止更新时使用子查询没有性能优势。
编辑:
这应解决公寓街道与街道街道的问题:
update street
set house_count = (select count(s.name)
from house h
where street.name = h.street_name
)
where exists (select 1 from house h where street.name = h.street_name);