2012-11-22 33 views
1

我有这样的表格:MySQL - 选择相互的行

user_id | wants_user_id |状态

而且我想选择相互交叉的行,并且具有值为“是”或“可能”的state列。

实施例的数据:

行1:1 | 2 | "yes"
第2列:2 | 1 | "maybe"
第3列:3 | 2 | "yes"

在这种情况下,我想选择行1和2以及对wants_user_id(第二列)我想加入表users的用户数据,但是我找不到sql命令。

谢谢你的帮助。

回答

0

使用自联接得到匹配的行(我假设“互行”在这里的意思是想让对方用户):

SELECT * 
FROM myTable a 
INNER JOIN myTable b ON a.user_id = b.wants_user_id 
    AND b.user_id = a.wants_user_id 
INNER JOIN users ua ON a.user_id = ua.id 
INNER JOIN users ub ON b.user_id = ub.id 
WHERE a.state IN ('yes', 'maybe') 
AND b.state IN ('yes', 'maybe') 

在这种情况下,你会得到两个“复制”行,一个用于1 <→2和一个用于2 <→1。为了消除这种情况,您可以将AND b.user_id > a.user_id添加到连接条件 - 这将只选择每对中的一行。

+0

是的,这正是我一直在寻找的,谢谢! – kudlajz