SQL:
select s.Smsid,s.SmsContent,s.Smstitle,b.UserName from Sms s,OASmsTo o,BaseUser b
where s.SenderId=b.UserId and s.SmsId=o.SmsId and o.ReceiverID=3
分析如下:
1.我需要哪些数据?
根据需要,找到相应的字段 Smsid SmsContent Smstitle UserName
2.这些数据在哪里能够找到?
分析后发现Smsid SmsContent Smstitle 在Sms表中,UserName在BaseUser表中,这样便能得到sql语句一部分如下:
select Smsid, SmsContent, Smstitle from Sms
select UserName from BaseUser
这样,需要的数据一定包含在上面两条sql语句查询出来的所有数据中,再筛选条件:
3.条件是什么?
怎么知道发送者名字呢?我从sms表那里只能找到发送者id,但是我从用户表那里能通过id找到名字,于是其中一个where条件:
select UserName from Sms,BaseUser where Sms.SenderId=BaseUser.UserId
还有一个显式条件是收信人的id为3,我们发现虽然ReceiverID又在另一个表中,于是得到其中一个where条件:
where Sms.SmsId=OASmsTo.SmsId and OASmsTo.ReceiverId=3
4.这样,涉及到的3张表通过条件都关联起来了,于是整合得出结果:
select s.Smsid,s.SmsContent,s.Smstitle,b.UserName from Sms s,OASmsTo o,BaseUser b
where s.SenderId=b.UserId and s.SmsId=o.SmsId and o.ReceiverID=3
不知道楼主看明白没,一般做查询时都要考虑这些问题,当你考虑明白了,sql语句也差不多了:
1)需要哪些数据?
2)这些数据在哪些表中?
3)它们之间存在什么关联?
另外,楼主要知道,n张表关联时,至少需要n-1个条件,才能有效关联n张表。少于n-1个条件,那就不是有效的n表关联了。