如何通过一个表中的一列从两个表中获取值

时间:2018-05-14 19:16:24

标签: sql mariadb

我有两个简单表格之间的关系如下:

Table USERS:
ID  Name
100 User1
243 User2
681 User3

Table MSGS:
FromU ToUser Txt [... DTime]
243   100    Bla bla bla
100   243    Taaa
243   681    Bo bo bo
681   243    Mi mi miiii
681   100    Exemples
100   681    Very good

Relationship:
FromU -> ID (table USERS)
ToUser -> ID (table USERS)

如何将一个用户发送给另一个用户的所有消息以及用户从其他用户和用户的名字回复的答案,我徘徊。
例如,如果我想获取User2发送的所有消息并且消息User2返回,那么我需要这些数据:

FromU  Name    ToUser  Name   Txt
243    User2   100     User1  Bla bla bla
100    User1   243     User2  Taaa ...
243    User2   681     User3  Bo bo bo
681    User3   243     User2  Mi mi miiii

我无法获得用户的姓名。有了这个SQL

SELECT FromU, ToUser, Txt 
FROM msgs 
WHERE FromU = 243 OR ToUser = 243 
ORDER BY DTime ASC

我明白了:

243   100    Bla bla bla
100   243    Taaa ...
243   681    Bo bo bo
681   243    Mi mi miiii

有什么想法吗?我使用MariaDB。提前谢谢!

2 个答案:

答案 0 :(得分:0)

您应该使用与用户的连接(在示例中有两个joi以获取两个名称)

  "SELECT m.FromU, m.ToUser, m.Txt, u1.Name as from_name, u2.name as to_name 
   FROM msgs m
   INNER JOIN user u1 on m.FromU = u1.id
   INNER JOIN user u2 on m.ToU = u2.id
   WHERE m.FromU = 243 OR m.ToUser = 243 
   ORDER BY m.DTime ASC" 

答案 1 :(得分:0)

我从未使用过MariaDB,但在TSSQL中你会做类似的事情:

SELECT from.Name as FromUser, to.Name, Txt FROM MSGS INNER JOIN USERS AS from ON from.ID = FromU INNER JOIN USERS AS to ON to.ID = ToUser WHERE FromU = 243 OR ToUser =243

希望它有所帮助。