在数据库中有两个表,分别是[Messages]聊天记录和[Users]用户,聊天记录中包括[MsgId]消息编号(int)、[SenderId]发送者编号(int)、[ReceiverId]接收者编号(int)和[Content]消息内容(text)四个字段,其中MsgId是主键;用户表中包括[UsrId]用户编号(int)和[UsrName]用户名(nvarchar)两个字段,主键为UsrId,即
|
|
| MsgId | SenderName | ReceiverName | Content |
| 1 | Tom | Jim | Hello! |
| 2 | Jim | Tom | Hello! |
| 3 | Lucy | Tom | How R U ? |
| 4 | Lucy | Jim | Good Day |
| 5 | Tom | Lucy | Fine! |
| ... | ... | ... | ... |
SELECT Messages.MsgId, Sender.UsrName AS SenderName, Receiver.UsrName AS ReceiverName,Messages.Content FROM Messages INNER JOIN Users AS Sender ON Sender.UsrId= Messages.SenderId INNER JOIN Users AS Receiver ON Messages.ReceiverId= Receiver.UsrId
意思是用tableexpression1 AS tableexpression2对User表做了两个“镜象”,一个用来关联Messages.SenderId,另外一个用来关联Messages.ReceiverId,这样就完成了对编号进行翻译的功能。
值得一提的是如果要考虑到某个人对空气说的话(ReceiverId为空或Users表中对应不上)并保证可以看到全部聊天记录的话,可以把INNERJOIN换成LEFT JOIN或RIGHT JOIN,总之要多去尝试就会发现问题的解决方法。
没有评论:
发表评论