sql-user zebra table-两个用户相互跟踪吗?

byqmnocz  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(324)

我有下表叫做 user_zebra :

此表用于存储我的站点上两个成员之间的友谊-用户id是发送朋友请求的人,成员id是他们试图添加的人。日期不言自明。
当其他用户对好友请求的响应为“是”时,会添加另一个条目,但用户标识和成员标识会被翻转。只有当双方都有一个条目时,你才被认为是朋友。。。否则你只是在跟踪那个用户。
我需要知道的是,是否有sql代码可以返回用户id和成员id,只要有另一个条目具有这些值。这可能吗?还是有更简单的方法?
我希望我说得很清楚,很抱歉发了这么长的邮件。

ct3nt3jp

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 . 你从来没有告诉我们你要报告哪一对;这是一种方法。

e4eetjau

e4eetjau2#

对。一种方法是 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 -使用元组语法:

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 以避免结果集中出现重复项。

相关问题