如何使用sqlite连接这四个表

时间:2011-11-02 06:48:11

标签: sql sqlite join

我的sqlite数据库出了问题。我正在尝试编写一个查询,为特定的访客(guestID)生成总帐单

访客

  • GuestID(主键,类型:整数,自动增量)
  • FName(类型:文字)
  • LName(类型:文字)

预订

  • 预订编号(主键,类型:整数,自动增量)
  • CheckIN(类型:日期时间)
  • Checkout(Type:DateTime)
  • GuestID(类型:整数)
  • RoomNumber(类型:整数)

房间

  • RoomNumber(主键,类型:整数)
  • RoomTypeID(类型:整数)

ROOMTYPE

  • RoomTypeID(主键,类型:整数)
  • 床(类型:文字)
  • 价格(类型:整数)

我知道我必须从Reservation.checkin中减去Reservation.checkout以获取天数,然后将其乘以RoomType.price以便给我一个总账单。那么我如何编写我的sql查询来为特定的访客(guestid)提供总账单?我知道你最多可以加入三个表,但我不知道如何加入这四个表。请帮忙。提前谢谢。

2 个答案:

答案 0 :(得分:0)

加入这四个表只是匹配列,然后一切都到位:

select ...
from guest
join reservation on guest.guestid = reservation.guestid
join room on reservation.roomnumber = room.roomnumber
join roomtype on room.roomtypeid = roomtype.roomtypeid
where guest.guestid = ?
  ...

如果您不需要访客姓名,则只需加入三个表:

select ...
from reservation
join room on reservation.roomnumber = room.roomnumber
join roomtype on room.roomtypeid = roomtype.roomtypeid
where reservation.guestid = ?
  ...

答案 1 :(得分:0)

在sql中有2种方式是1,在应用程序级别中有1种方式 1)sql:

SELECT g.*, ((strftime('%s',r.CheckOUT) - strftime('%s',r.CheckIN)) * rt.Price/24/60/60) AS total
FROM GUEST g, RESERVATION r, ROOM rm, ROOMTYPE rt
WHERE g.GuestID = r.GuestID AND r.RoomNumber = rm.RoomNumber AND
rm.RoomTypeID = rt.RoomTypeID

您可以根据需要修改您的需求,基本上该语句是获取来宾表中的列并计算他/她需要支付的价格,方法是减去签出和签入日期(以秒为单位)并乘以价格降低到每秒

2)应用级别: 您可以运行2个sql语句来获取特定客户的特定房间的价格。 用您使用php / ruby​​ / java等语言进行价格计算。