我有2张桌子:Person和House。
每个人都有一个姓名,电子邮件和电话号码,而一所房子有许多房间和城市位置。
我必须显示每个人的姓名和房屋数量,其中房屋数量是一个人拥有多少房屋。

这似乎是一对多的关系。
所以这是我对人员表的查询:

CREATE TABLE Person ( person_id INT NOT NULL PRIMARY KEY,
       name VARCHAR(15) NOT NULL,
       email VARCHAR(320) NOT NULL,
       phone_number VARCHAR(15) NOT NULL);


这是房屋表的查询:

CREATE TABLE House (
    house_id INT NOT NULL PRIMARY KEY,
    person_id INT NOT NULL,
    number_of_rooms INT NOT NULL,
    city_location VARCHAR(15) NOT NULL,
    FOREIGN KEY(person_id) REFERENCES Person(person_id) );


为了显示每个人有多少房子,我编写了以下查询:

SELECT name AS "Person name", count(house_id) AS "Number of houses" FROM Person JOIN House WHERE Person.person_id = House.person_id;


但是该查询仅显示我插入的名字(插入了更多名字)以及该名称的house_id的总和(对于house_id#1&#2&#3,结果应为3,但显示为6),即它。

当我第一次想到它时,它真的很容易构建,我不知道为什么我为此花了很多时间。有什么帮助吗?

最佳答案

SELECT p.name AS "Person name", count(h.house_id) AS "Number of houses"
FROM Person p
LEFT JOIN House h ON h.person_id = p.person_id
GROUP BY p.name


这就是你所需要的。

我更改了以下内容:


向表添加了别名(方便使用)
使用LEFT OUTER JOIN(简称LEFT JOIN)而不是INNER JOIN(简称JOIN)来获得没有匹配房屋的人(房屋数将为零)
ON添加了JOIN子句(语法必需)
添加了GROUP BY子句。使用COUNT之类的聚合函数时必需

关于mysql - 在MySQL中为每个人计数房屋,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34780599/

10-13 08:47