2017-03-02 48 views
0

我有兩個表:如何創建一個查詢來計算外鍵在另一個表中使用的次數?

CREATE TABLE "OEHR_COUNTRIES" (
    "COUNTRY_ID" CHAR(2)  CONSTRAINT "OEHR_COUNTRY_ID_NN" NOT NULL ENABLE, 
    "COUNTRY_NAME" VARCHAR2(40), 
    "REGION_ID"  NUMBER, 
    CONSTRAINT "OEHR_COUNTRY_C_ID_PK" PRIMARY KEY ("COUNTRY_ID") ENABLE 
    )/ 

CREATE TABLE "OEHR_LOCATIONS" (
    "LOCATION_ID"  NUMBER(4,0), 
    "STREET_ADDRESS" VARCHAR2(40), 
    "POSTAL_CODE"  VARCHAR2(12), 
    "CITY"    VARCHAR2(30) CONSTRAINT "OEHR_LOC_CITY_NN" NOT NULL ENABLE, 
    "STATE_PROVINCE" VARCHAR2(25), 
    "COUNTRY_ID"  CHAR(2), 
    CONSTRAINT "OEHR_LOC_ID_PK" PRIMARY KEY ("LOCATION_ID") ENABLE 
    ) 
/

,我需要創建顯示與的每個位置都有數一起的名稱和每一個國家的ID查詢。

+1

OK,你有什麼企圖? – OldProgrammer

+1

@ EJG101 - 請不要無故破壞帖子。 – GurV

回答

0

這是一個簡單left join和彙總:

select c.country_id, 
    c.country_name, 
    count(*) num_of_locations 
from oehr_countries c 
left join oehr_locations l on c.country_id = l.country_id 
group by c.country_id, 
    c.country_name 
0
select country_name, count(*) 
from oehr_countries m, oehr_locations d 
where m.country_id = d.country_id 
+0

這將省略沒有位置的國家 - 使用外部連接更安全。此外,舊式聯接語法(FROM子句中的多個表而不是顯式JOIN)不應再使用。 –

+0

對不起,我是新來的。大家一直說ANSI加入語法是唯一的出路,但沒有人會說爲什麼。我可能會等到埃裏森先生或他的一個僕從聽到這個消息。但是,如果您可以引用一個有說服力的參考,我可能會嘗試閱讀它。 –

+0

我不相信省略沒有位置的國家會有所作爲。如果目標是計算外鍵,那麼我們繞過了不包含相關信息的行。 –

相關問題