簡體   English   中英

使用來自另一個表的計數更新Oracle中的特定行

[英]Update specific rows in Oracle using the count from another table

我試圖用另一個表(房屋)的計數來更新一個表(街道)中的一些記錄。 我正在嘗試使用該街道上的正確房屋數量來更新街道表中的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中使類似的東西起作用的任何幫助。

謝謝

您可以使用相關子查詢來執行此操作:

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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM