简体   繁体   English

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

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

I have two database table, one is registerd user table and the other one is chat message table. 我有两个数据库表,一个是注册用户表,另一个是聊天消息表。 I want to list users that have conversion in chat message table. 我想在聊天消息表中列出进行了转换的用户。 The below sql query does it but it show the active user name as on the list instead of the party user. 下面的sql查询可以执行此操作,但是它在列表中显示的是活动用户名,而不是聚会用户。

## Table users_account ##表users_account

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

Table chatroom_message 表chatroom_message

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

SQL 的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

Current Session User Id = 1 (Peter) , so when i run above sql query it return below table 当前会话用户ID = 1 (Peter) ,因此当我在sql查询上运行时,它返回表下方

Resault 抢断

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

My problem is how do i run an sql query to check if the active user is in chat message userid_a OR userid_b 我的问题是如何运行sql查询以检查活动用户是否在聊天消息userid_a OR userid_b
If the result is found let it return the name of the chat party which is John , as his contact chat list, same goes to John When he login the result will also show him Peter not his own now 如果找到结果,则让它返回聊天方的姓名John ,作为他的联系人聊天列表,同样属于John当他登录时,结果还将显示Peter现在不是他自己的

I want my result be John login to his account the name of Peter will show as his chat partner. 我希望我的结果是John登录到他的帐户,Peter的名字将显示为他的聊天伙伴。

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

I want my result be Peter login to his account the name of John will show as his chat partner. 我希望我的结果是Peter登录到他的帐户,John的名字将显示为他的聊天伙伴。

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

I guess you are almost there. 我想你快到了。 This is probably what you are looking for: 这可能是您要寻找的:

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

I think this command can serve you 我认为这个命令可以为您服务

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] [演示]

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

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