MySQL - 选择相互的行

时间:2012-11-22 15:46:31

标签: 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命令。

感谢您的帮助。

1 个答案:

答案 0 :(得分: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 - 这将只选择每对中的一行。