SQL Query从内部联接

时间:2017-10-11 19:39:52

标签: mysql sql inner-join union

我有两个数据库表,一个是注册用户表,另一个是聊天消息表。  我想列出在聊天消息表中有转换的用户。下面的SQL查询做到了,但它显示了  列表中的活动用户名,而不是聚会用户。

##表users_account

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

表chatroom_message

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

当前会话用户ID = 1 (Peter),所以当我在sql查询上面运行它返回到表格

Resault

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

我的问题是如何运行SQL查询以检查活动用户是否在聊天消息中userid_a OR userid_b
如果找到结果,则让它返回聊天方的名称John,作为其联系人聊天列表,同样转到John 当他登录时,结果也会显示他Peter而不是他自己的

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

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

我希望我的结果是Peter登录到他的帐户,John的名字将显示为他的聊天伙伴。

reg_userid | Name
--------------------------
2          | John   

2 个答案:

答案 0 :(得分:0)

我想你差不多了。这可能就是你要找的东西:

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

答案 1 :(得分:0)

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

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]