Mysql Query匹配两列

时间:2012-05-06 00:07:29

标签: mysql

我有以下表结构:

Id, SpouseId
1, 2
2, 1

基本上这表明两个人是否结婚了。

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

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

1 个答案:

答案 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较低的对。