2016-01-14 55 views
0

我有兩個表,一個調查表和一個屬性表,我正在嘗試編寫一個選擇腳本,它將顯示調查數量的屬性列表這是每個人都進行的。 起初,我只是給我的調查實體添加了一個屬性,指出調查數量,因此我可以編寫一個簡單的腳本。例如,如何提高我的表,以便有效地使用計數函數

SELECT Property_Address, No_of_Survey 
FROM Property, Survey 
WHERE Property.Property_ID = Survey.Property_ID; 

然而,由於我是新來這個,我很快就意識到,這是設計不良,因爲用戶將不得不在每次更新調查的數量,而應該將數據庫進行計算。 那麼我認爲我的選擇查詢應該真的使用計數函數,現在我只是完全混淆了自己! 我想出了一個查詢,但它不起作用,指出該列是不明確定義的。這是我的新腳本;

SELECT Property_Address, COUNT(Survey_ID) AS SurveyCount 
FROM Property, Survey 
WHERE Property_ID.Property_ID = Survey.Property_ID 
GROUP by property_ID; 

我真的很希望知道我的創建表需要進行改變,使我的查詢按預期工作,或如果查詢只需要改變。

這是我的桌子;

CREATE TABLE Property 
(
Property_ID varchar(5),        
Property_Address varchar(25), 
Property_Town varchar(25), 
Property_Postcode varchar(25),      
Asking_Price varchar2(20),       
Date_Registered DATE,         
Property_Type varchar2(50),       
Num_Rooms varchar2(50),        
Buyer_ID varchar(5),         
Seller_ID varchar(5),         
Branch_ID varchar(5),         
PRIMARY KEY (Property_ID),       
FOREIGN KEY (Buyer_ID) REFERENCES Buyer(Buyer_ID), 
FOREIGN KEY (Seller_ID) REFERENCES Seller(Seller_ID), 
FOREIGN KEY (Branch_ID) REFERENCES Branch(Branch_ID) 
); 

CREATE TABLE Survey 
(               
Survey_ID varchar(5),          
No_of_Survey varchar2(10),         
Survey_Type varchar2(50),         
Property_ID varchar(5),          
Buyer_ID varchar(5),          
PRIMARY KEY (Survey_ID),         
FOREIGN KEY (Property_ID) REFERENCES Property(Property_ID), 
FOREIGN KEY (Buyer_ID) REFERENCES Buyer(Buyer_Id) 
); 

回答

2

首先,您應該學習正確的顯式JOIN語法。 。 。並使用它。此外,GROUP BY列應與未聚集SELECT列:

SELECT p.Property_Address, COUNT(s.Survey_ID) AS SurveyCount 
FROM Property p JOIN 
    Survey s 
    ON p.Property_ID = s.Property_ID 
GROUP by p.Property_Address; 

注意,表的別名使查詢更容易編寫和閱讀。最後,如果你想要的所有屬性,即使是那些沒有調查,然後使用LEFT JOIN

SELECT p.Property_Address, COUNT(s.Survey_ID) AS SurveyCount 
FROM Property p LEFT JOIN 
    Survey s 
    ON p.Property_ID = s.Property_ID 
GROUP by p.Property_Address; 
+0

感謝戈登,我現在可以看到我錯在哪裏,如何避免今後犯同樣的錯誤。 –

相關問題