我有以下表结构:
Id, SpouseId
1, 2
2, 1
基本上这告诉了两个人是否结婚。
我需要编写一个 mysql 查询,在数据库中返回已婚夫妇。
我首先想我会检查 SpouseId 是否不为空,但这还不够,因为我还需要检查 Id 是否存在。
我有以下表结构:
Id, SpouseId
1, 2
2, 1
基本上这告诉了两个人是否结婚。
我需要编写一个 mysql 查询,在数据库中返回已婚夫妇。
我首先想我会检查 SpouseId 是否不为空,但这还不够,因为我还需要检查 Id 是否存在。
使用INNER JOIN
反对自身返回两个伙伴都存在的对。这样,为了满足 JOIN 条件,配偶不仅必须是非空的,而且还必须有一个匹配的行 as 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。id 较高的对person
被保留,而 id 较低的对person
被淘汰。