我有以下表格结构:
Id, SpouseId
1, 2
2, 1
基本上这说明两个人是否结婚。
我需要编写一个mysql查询,在数据库中返回已婚夫妇。
我首先想到我会检查SPOSEID是否不是空的,但这还不够,因为我还需要检查ID是否存在。
最佳答案
使用INNER JOIN
对自身返回两个合作伙伴存在的对。这样,为了满足联接条件,配偶不仅必须是非空的,而且必须有一个匹配行Id
。希望您没有任何对应的SpouseId
的SpouseId
不是另一个Id
的实例(即a->嫁给B->嫁给C)
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
但是,请注意,这将为每对返回2行,因为每个伙伴都将同时出现在
Id
和SpouseId
中。更新
添加了
WHERE
子句以消除每对已婚夫妇的一行。想法是,每一对都有一个较高的id和一个较低的id。保留person
中id较高的一对,消除person
中id较低的一对。