【发布时间】:2018-06-06 20:45:05
【问题描述】:
我有两张桌子:
CREATE TABLE Person {
ID INT PRIMARY KEY,
Name VARCHAR(50) NOT NULL,
Surname VARCHAR(50) NOT NULL
}
和
CREATE TABLE Address {
ID INT PRIMARY KEY,
ID_Person INT NOT NULL,
Street VARCHAR(50),
HouseNumber VARCHAR(15),
City VARCHAR(75),
Zipcode VARCHAR(10),
CountryCode CHAR(2),
IsPrimary TINYINT(1) DEFAULT 0
}
每个人可以有多个地址,但最多可以有一个是主地址 (IsPrimary = 1)。
我想获取具有一个地址的人员列表。如果人有主地址,则应提供,如果没有,则检索哪个地址无关紧要。
我有这个问题:
SELECT
p.Name,
p.Surname,
a.Street,
a.Housenumber,
a.City,
a.Zipcode
FROM
Person AS p
LEFT JOIN (select * from Address ORDER BY IsPrimary DESC) AS a ON p.ID = a.ID_Person
GROUP BY p.ID
但这并没有提供我期望的结果。我希望在执行GROUP BY 时检索到连接表的第一行,但事实并非如此。
here 提出了类似的问题,但在我的情况下解决方案相当困难。
【问题讨论】:
标签: mysql join group-by sql-order-by greatest-n-per-group