首页 > 这个SQL语句怎么写?

这个SQL语句怎么写?

表一(用户表):userid和username 用户ID和用户名
表二(信息表):msgid、content、senderid、receiverid 信息ID、信息内容、发送者ID和接受者ID

请问怎么写SQL查询语句,是的查到的结果是信息内容、发送者用户名和接受者用户名?


使用SQL中的INNER JOIN可以达到这个要求。类似的SQL查询可以在这条的基础上修改得到(下面这条就是根据例子修改的hh)

SELECT msg.信息内容, sender.UserName, receiver.UserName
FROM 表二 msg
INNER JOIN 表一 sender ON msg.SenderID = sender.UserID
INNER JOIN 表一 receiver ON msg.ReceiverID = receiver.UserID
ORDER BY sender.UserID;

参考:
http://www.w3school.com.cn/sql/sql_join_inner.asp
http://stackoverflow.com/questions/10195451/sql-inner-join-with-3-tables


select m.*,st.username as sendername,rt.username as receivername
from message_table mt 
left join user_table st on (mt.senderid = st.userid)
left join user_table rt on (mt.receiverid = rt.userid)


也可可以采用视图。

假设用户表名为 users ,而消息表名为 messages

一句SQL,使用左外联结

sqlSELECT 
msg.content,
snd_user.username,
rcv_user.username
FROM
messages as msg
LEFT OUTER JOIN
users as snd_user 
ON
msg.senderid = snd_user.userid
LEFT OUTER JOIN
users as rcv_user 
ON
msg.receiverid = rcv_user.userid


如果是在做Web项目等,为了提高性能的,应当考虑单独查询,然后对数据进行单行缓存(一般情景都能满足需求)

而很多Web框架的ORM层都提供了数据对象见关系的加载,相当于以下SQL

SELECT 
msgid, content, senderis, receiverid
FROM
messages
-- WHERE ...

SELECT
userid, username
FROM
users
WHERE
userid = ...
【热门文章】
【热门文章】