我有一张这样的表:
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 :(得分: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
- 这将只选择每对中的一行。