我有两个表,一个调查表和一个属性表,我正在尝试编写一个选择脚本,该脚本将显示一个属性列表,其中包含对每个属性执行的调查数。 起初我刚刚在我的调查实体中添加了一个属性,说明了调查的数量,因此我可以编写一个简单的脚本。 例如。
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)
);
答案 0 :(得分: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;