繁体   English   中英

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

[英]SQL Query to return multiple data from inner join

我有两个数据库表,一个是注册用户表,另一个是聊天消息表。 我想在聊天消息表中列出进行了转换的用户。 下面的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查询上运行时,它返回表下方

抢断

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

我的问题是如何运行sql查询以检查活动用户是否在聊天消息userid_a OR userid_b
如果找到结果,则让它返回聊天方的姓名John ,作为他的联系人聊天列表,同样属于John当他登录时,结果还将显示Peter现在不是他自己的

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

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

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

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

我想你快到了。 这可能是您要寻找的:

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

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

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 

[演示]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM