我有一个具有以下结构的数据库表,用于匹配约会事件中的人:
ID | EVENT | USERS_ID | MATCH_ID | GENDER
1 | 27 | 54 | 1245 | Female
2 | 27 | 54 | 21 | Female
3 | 27 | 21 | 45 | Male
4 | 27 | 21 | 54 | Male
我正在尝试编写我的查询,这将给我我的匹配。 例如,根据上面的数据,用户54匹配用户21,因为54选择21和21选择54。
我需要将USER_ID和EVENT作为输入传递,并获取与该用户匹配的MATCH_ID列表。 所以,
SELECT match_id FROM……. WHERE users_id = 54 AND event = 27
我还需要知道哪些用户没有得到任何匹配。这将是一个单独的查询。从上面的示例中,用户45没有相互匹配。
我一直在和这个人打架。对此的任何想法都会很棒。
感谢。
答案 0 :(得分:2)
未经测试,但我认为这应该适合您:
SELECT t2.users_id FROM
tbl t1
INNER JOIN tbl t2
ON t1.users_id = t2.match_id AND t1.match_id = t2.users_id
WHERE t2.event = 27
AND t1.users_id = 54;
此外,为了找到所有没有任何匹配的用户,这可能会有效:
SELECT t1.match_id
FROM
tbl t1
LEFT JOIN
tbl t2
ON t1.match_id = t2.users_id
WHERE t2.id IS NULL;
这里的一般原则是将表连接到自身,并以这种方式找到匹配。
编辑:做了一些更正,感到非常自信这应该适合你。
编辑2:这是最后的修正,我认为应该为你全力以赴。
SELECT * FROM event_matches t1 INNER JOIN event_matches t2 ON t1.users_id = t2.matches AND t1.matches = t2.users_id AND t1.event_id = t2.event_id 在哪里t2.event_id = 45 AND t1.users_id = 1239;