1

我有以下表结构:

Id, SpouseId
1, 2
2, 1

基本上这告诉了两个人是否结婚。

我需要编写一个 mysql 查询,在数据库中返回已婚夫妇。

我首先想我会检查 SpouseId 是否不为空,但这还不够,因为我还需要检查 Id 是否存在。

4

1 回答 1

3

使用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 行,因为每个伙伴都将同时出现IdSpouseId

更新

添加该WHERE子句是为了消除每对已婚夫妇的一行。这个想法是,对于每一对,都有一个较高的 id 和一个较低的 id。id 较高的对person被保留,而 id 较低的对person被淘汰。

于 2012-05-06T00:10:12.670 回答