Mysql 选择主要或次佳记录
我有三张桌子,上面有联系人的信息和地址Mysql 选择主要或次佳记录,mysql,sql,Mysql,Sql,我有三张桌子,上面有联系人的信息和地址 Contact id name dob etc... Address line1 line2 postcode etc... ContactAddress contact_id address_id primary 我正试图找出如何获得联系人列表和一个地址。此地址应为主地址(如果主地址设置为true),如果有一个可用数据,则为辅助地址,如果两个数据都不可用,则为空白数据 显然,在ContactAddress上使用g
Contact
id
name
dob
etc...
Address
line1
line2
postcode
etc...
ContactAddress
contact_id
address_id
primary
我正试图找出如何获得联系人列表和一个地址。此地址应为主地址(如果主地址设置为true),如果有一个可用数据,则为辅助地址,如果两个数据都不可用,则为空白数据
显然,在ContactAddress上使用group by会为每个联系人提供一个地址,但我如何将这些地址标记为primary(主地址)的优先级。此查询应该可以做到这一点
SELECT c.Id, c.Name, c.DOB, a.Line1, a.Line2, a.Postcode
FROM Contact c
INNER JOIN ContactAddress ca ON c.Id = ca.Contact_Id
INNER JOIN [Address] a ON ca.Address_Id = a.Id
INNER JOIN
(SELECT c.Id AS Contact_Id,
(SELECT TOP 1 Address_Id FROM ContactAddress WHERE Contact_Id=c.Id ORDER BY [Primary] DESC) AS Address_Id
FROM Contact c) x
ON ca.Contact_Id = x.Contact_Id and ca.Address_Id = x.Address_Id
UNION
SELECT c.Id, c.Name, c.DOB, null, null, null
FROM Contact c
WHERE NOT EXISTS (SELECT * FROM ContactAddress WHERE Contact_Id=c.Id)