2011-03-31 26 views
0

好的,这是一个有点棘手的解释,但可以很容易实现。在MySQL中选择匹配/相互记录

我有以下结构的表:

`match_id` int(69) NOT NULL auto_increment, 
`event_id` int(6) NOT NULL, 
`users_id` int(6) NOT NULL, 
`matches` int(6) default NULL 

所以这里是数据的样本

33  11  54  1221 
32  11  54  21 
31  11  21  54 
30  11  43  54 

所以,在英语,这是需要采取什么措施: 据一个个人选择图表,user1选择user2,反之亦然。我只需要USERS_ID他们相互选择。 如果我正在寻找匹配= 54,我需要得到users_id = 21。因为54匹配21和21匹配54.

有关如何为此编写SQL语句的任何想法? 非常感谢。 布鲁诺。

回答

2

试试这个:

SELECT DISTINCT a.user_id 
    FROM <YOUR_TABLE> a INNER JOIN <YOUR_TABLE> b 
    ON a.matches = b.users_id 
    AND b.matches = a.users_id 
WHERE a.matches = 54 
+0

多谢你们。所有解决方案都很棒! – Bruno 2011-03-31 20:04:12

0
SELECT `tn1`.`users_id` from `TableName` `tn1` 
JOIN `TableName` `tn2` ON `tn1`.`matches` = `tn2`.`users_id` 
AND `tn2`.`users_id` = `tn1`.`matches` 

其中表名 - 你的表

1
select u1.user_id, u2.user_id 
from t u1, z u2 
where u1.matches = u2.user_id and u2.matches = u1.user_id 

的名字,你仍然会得到2行54,21和21,54