1

我有一张这样的桌子:

用户 ID | want_user_id | 状态

我想选择相互的行并且有一state列的值为“是”或“可能”。

示例数据:

第 11 | 2 | "yes"
行: 第 22 | 1 | "maybe"
行: 第 3 行:3 | 2 | "yes"

在这种情况下,我想选择第 1 行和第 2 行,然后在wants_user_id(第二列)我想从 table 加入用户数据users,但我无法弄清楚 sql 命令。

感谢您的帮助。

4

1 回答 1

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在连接条件中添加一个 - 这将只选择每对中的一行。

于 2012-11-22T15:49:41.033 回答