从mysql查询中获取匹配的记录

时间:2011-06-24 16:43:50

标签: mysql

我有一个具有以下结构的数据库表,用于匹配约会事件中的人:

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没有相互匹配。

我一直在和这个人打架。对此的任何想法都会很棒。

感谢。

1 个答案:

答案 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;