• 全部
  • 基础类
  • 应用实例
  • 新技术前沿

一个简单的多表查询的问题

wu209000 2008-03-16 04:50:32
有一个旅馆房间表(Room)
roomNo price type

旅客表(Guest)
guestNo guestName

一个订单表(Booking)
guestNo(FK) roomNo(FK)

我想查询所有房间的信息,如果该房间有旅客则显示旅客的姓名
例如:
roomNo price type
r001 50 type
r002 30 type

guestNo guestName
gt001 name

guestNo roomNo
gt001 r002

那得到的结果应该是这样
roomNo price type guestName
r001 50 type
r002 30 type name

请问查询语句应该怎么写啊
...全文
40 点赞 收藏 5
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
dawugui 2008-03-16
[Quote=引用 2 楼 wu209000 的回复:]
我想问一下为什么要用 left join on 来联接呢, 跟直接用 where 语句联接有什么区别的.
[/Quote]
我想查询所有房间的信息,如果该房间有旅客则显示旅客的姓名
--------------------------------------------------------------------------
这是根据你的要求来的.所以要用left join

如果你要求房间没有预定就不显示,就直接用inner join.(就是三表直接连接.)
回复
dawugui 2008-03-16
select room.* , isnull(guest.guestname , '') guestname
from room
left join booking on room.roomno = gooking.roomno
left join guest on booking.guestno = guest.guestno
回复
fcuandy 2008-03-16
where 会转化为 inner join
inner join 与 left join的区别可以看联机丛书. 即会过滤右表不匹配的的行.
回复
wu209000 2008-03-16
我想问一下为什么要用 left join on 来联接呢, 跟直接用 where 语句联接有什么区别的.
回复
pt1314917 2008-03-16

select a.*,isnull(guestname,'')guestname from room a
left join booking c on a.roomno=c.roomno
left join guest b on b.guestno=c.guestno
回复
相关推荐
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2008-03-16 04:50
社区公告
暂无公告