代码之家  ›  专栏  ›  技术社区  ›  Peter

从内部联接返回多个数据的SQL查询

  •  1
  • Peter  · 技术社区  · 7 年前

    我想在聊天信息表中列出有转换的用户。下面的sql查询可以做到这一点,但它显示了 列表中的活动用户名,而不是参与方用户。

    ##表users\u帐户

    reg_userid | Name
    --------------------------
    1          | Peter   
    2          | John   
    

    userid_a | userid_b
    --------------------------
    1          | 2   
    3          | 1
    

    SQL

    SELECT * FROM chatroom_message cm
    INNER JOIN users_account ua ON cm.userid_a = ua.reg_userid 
    WHERE cm.userid_a = :chat_client
    UNION ALL
    SELECT * FROM chatroom_message cm
    INNER JOIN users_account ua ON cm.userid_b = ua.reg_userid 
    WHERE cm.userid_b = :chat_client
    

    1 (Peter) ,所以当我在sql查询上面运行时,它会返回到表下面

    重新结果

    reg_userid | Name
    --------------------------
    1          | Peter   
    

    我的问题是如何运行sql查询来检查活动用户是否在聊天消息中 userid_a OR userid_b
    如果找到结果,则返回聊天方的名称,即 John ,作为他的联系人聊天列表,同样适用于 约翰 Peter

    我想我的结果是约翰登录到他的帐户的彼得的名字将显示为他的聊天伙伴。

    reg_userid | Name
    --------------------------
    1          | Peter  
    

    我想我的结果是彼得登录到他的帐户的约翰的名字将显示为他的聊天伙伴。

    reg_userid | Name
    --------------------------
    2          | John   
    
    2 回复  |  直到 7 年前
        1
  •  0
  •   Radim Bača    7 年前

    我想你就快到了。这可能就是你想要的:

    SELECT ua.reg_userid, ua.name FROM chatroom_message cm
    INNER JOIN users_account ua ON cm.userid_b = ua.reg_userid 
    WHERE cm.userid_a = :chat_client
    UNION ALL
    SELECT ua.reg_userid, ua.name  FROM chatroom_message cm
    INNER JOIN users_account ua ON cm.userid_a = ua.reg_userid 
    WHERE cm.userid_b = :chat_client
    
        2
  •  0
  •   Patrick Arguello    7 年前

    我认为这个命令可以为你服务

    SELECT cm.*, 
          ua.reg_userid, ua.Name ,
          ua2.reg_userid, ua2.Name
       FROM chatroom_message cm
              INNER JOIN users_account ua 
                      ON cm.userid_a = ua.reg_userid 
              INNER JOIN users_account ua2 
                      ON cm.userid_b = ua2.reg_userid
        WHERE cm.userid_a = :chat_client 
    

    [demo]