我有一张这样的桌子:
用户 ID | want_user_id | 状态
我想选择相互的行并且有一state
列的值为“是”或“可能”。
示例数据:
第 11 | 2 | "yes"
行: 第 22 | 1 | "maybe"
行: 第 3 行:3 | 2 | "yes"
在这种情况下,我想选择第 1 行和第 2 行,然后在wants_user_id
(第二列)我想从 table 加入用户数据users
,但我无法弄清楚 sql 命令。
感谢您的帮助。
我有一张这样的桌子:
用户 ID | want_user_id | 状态
我想选择相互的行并且有一state
列的值为“是”或“可能”。
示例数据:
第 11 | 2 | "yes"
行: 第 22 | 1 | "maybe"
行: 第 3 行:3 | 2 | "yes"
在这种情况下,我想选择第 1 行和第 2 行,然后在wants_user_id
(第二列)我想从 table 加入用户数据users
,但我无法弄清楚 sql 命令。
感谢您的帮助。
使用自联接来获取匹配的行(我假设这里的“互行”是指需要彼此的用户):
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
在连接条件中添加一个 - 这将只选择每对中的一行。