我有以下表结构:
Id, SpouseId
1, 2
2, 1
基本上这表明两个人是否结婚了。
我需要编写一个mysql查询,在数据库中返回已婚夫妇。
我首先想到的是,我只会检查SpouseId是否为空,但这还不够,因为我还需要检查Id是否存在。
答案 0 :(得分:3)
使用INNER JOIN
反对自己返回双方都存在的对。这样,为了满足JOIN条件,配偶不仅必须是非空的,而且还必须具有匹配的行Id
。希望您没有任何相应SpouseId
的{{1}}不是另一个SpouseId
的情况(即A - >与B结婚 - >与C结婚)< / p>
Id
但是请注意,这会为每对返回2行,因为每个合作伙伴都会显示在SELECT
p.Id AS person,
s.Id AS spouse
From
people p
INNER JOIN people s ON p.SpouseId = s.Id
/* Should eliminate the duplicate, since one pair will always have
a higher id for the person than the spouse, and the other is lower. */
WHERE p.person > p.spouse
和Id
中。
添加SpouseId
子句以消除每个已婚对的一行。这个想法是,对于每一对,有一个更高的id和一个更低的id。保留WHERE
中ID较高的对,并删除person
中ID较低的对。