表一(用户表):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,使用左外联结
sql
SELECT 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 = ...