搜索

首页  >  问答  >  正文

SQL:如何通过比较行和列来查询具有复合键的联结表

我有一个 Mysql 连接表user_connections,它将users表与以下列进行映射:user_fromuser_to >,两者都是users表中的外键。

我的逻辑是,如果id1id2发送请求,在这种情况下,这将是一个待处理的请求。仅当 id2 接受请求时,该请求才会被视为已批准,该请求将在表格(红色框)中给出上面的 (id1, id2) 和 (id2, id1) 模式。

所以我的问题是如何查询user_connections表,以便我可以根据id1(蓝色框)获取所有待处理的请求

我不知道如何才能做到这一点。因此,任何帮助都会得到帮助。 预先感谢您。

P粉358281574P粉358281574447 天前516

全部回复(1)我来回复

  • P粉287345251

    P粉2873452512023-09-14 20:36:03

    如果您正在查找 user_connections 表定义的所有待处理请求,那么您需要对该表与其自身进行左外连接,如下所示:

    架构 (MySQL v5.7)

    create table user_connections (
      user_from int,
      user_to int,
      primary key(user_from, user_to)
      );
      
      insert into user_connections(user_from, user_to) values(1, 2);
      insert into user_connections(user_from, user_to) values(2, 1);
      insert into user_connections(user_from, user_to) values(67, 1);
      insert into user_connections(user_from, user_to) values(68, 1);
      insert into user_connections(user_from, user_to) values(69, 1);
      insert into user_connections(user_from, user_to) values(70, 1);

    查询#1

    select uc1.user_from, uc1.user_to from
    user_connections uc1 left join
    user_connections uc2 on uc2.user_from = uc1.user_to and uc2.user_to = uc1.user_from
    where uc2.user_from is null;
    user_from user_to
    67 1
    68 1
    69 1
    70 1

    回复
    0
  • 取消回复