我有下表叫做 user_zebra :此表用于存储我的站点上两个成员之间的友谊-用户id是发送朋友请求的人,成员id是他们试图添加的人。日期不言自明。当其他用户对好友请求的响应为“是”时,会添加另一个条目,但用户标识和成员标识会被翻转。只有当双方都有一个条目时,你才被认为是朋友。。。否则你只是在跟踪那个用户。我需要知道的是,是否有sql代码可以返回用户id和成员id,只要有另一个条目具有这些值。这可能吗?还是有更简单的方法?我希望我说得很清楚,很抱歉发了这么长的邮件。
user_zebra
ct3nt3jp1#
我们可以尝试在此处使用自联接:
SELECT t1.user_id, t1.member_id FROM yourTable t1 INNER JOIN yourTable t2 ON t1.user_id = t2.member_id AND t1.member_id = t2.user_id WHERE t1.user_id <= t1.member_id;
上述查询的逻辑是尝试将每个记录与其对应的记录进行匹配,其中 user_id 以及 member_id 换了位置。这个 WHERE 子句仅限于 user_id 小于或等于 member_id . 你从来没有告诉我们你要报告哪一对;这是一种方法。
user_id
member_id
WHERE
e4eetjau2#
对。一种方法是 exists :
exists
select user_id, member_id from t where exists (select 1 from t t2 where t2.user_id = t.member_id and t2.member_id = t.user_id );
mysql还支持非常方便的 IN -使用元组语法:
IN
select t.* from t where (t.user_id, t.member_id) in (select t2.member_id, t2.user_id from t t2);
在这两种情况下,您可能需要添加 where user_id < member_id 以避免结果集中出现重复项。
where user_id < member_id
2条答案
按热度按时间ct3nt3jp1#
我们可以尝试在此处使用自联接:
演示
上述查询的逻辑是尝试将每个记录与其对应的记录进行匹配,其中
user_id
以及member_id
换了位置。这个WHERE
子句仅限于user_id
小于或等于member_id
. 你从来没有告诉我们你要报告哪一对;这是一种方法。e4eetjau2#
对。一种方法是
exists
:mysql还支持非常方便的
IN
-使用元组语法:在这两种情况下,您可能需要添加
where user_id < member_id
以避免结果集中出现重复项。