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)