我有以下表格结构:

Id, SpouseId
1, 2
2, 1

基本上这说明两个人是否结婚。
我需要编写一个mysql查询,在数据库中返回已婚夫妇。
我首先想到我会检查SPOSEID是否不是空的,但这还不够,因为我还需要检查ID是否存在。

最佳答案

使用INNER JOIN对自身返回两个合作伙伴存在的对。这样,为了满足联接条件,配偶不仅必须是非空的,而且必须有一个匹配行Id。希望您没有任何对应的SpouseIdSpouseId不是另一个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。保留person中id较高的一对,消除person中id较低的一对。

09-25 16:39
查看更多