如何用 sqlite 加入这四个表
Posted
技术标签:
【中文标题】如何用 sqlite 加入这四个表【英文标题】:How do I join these four tables with sqlite 【发布时间】:2011-11-02 06:48:11 【问题描述】:我的 sqlite 数据库有问题。我正在尝试编写一个查询,该查询将为特定客人 (guestID) 生成总帐单
客人
GuestID(主键,类型:整数,自动递增) FName(类型:文本) LName(类型:文本)预订
预留编号(主键,类型:整数,自动递增) CheckIN(类型:日期时间) 结帐(类型:日期时间) GuestID(类型:整数) 房间号(类型:整数)房间
RoomNumber(主键,类型:整数) RoomTypeID(类型:整数)房间类型
RoomTypeID(主键,类型:整数) 床(类型:文本) 价格(类型:整数)我知道我必须从 Reservation.checkin 中减去 Reservation.checkout 才能得到天数,然后乘以 RoomType.price,这样就可以得到总账单。那么我将如何编写我的 sql 查询来给我一个特定客人 (guestid) 的总账单?我知道您最多可以加入三个表,但我不知道如何加入这四个表。请帮忙。提前谢谢你。
【问题讨论】:
【参考方案1】:2种方式是sql中的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 等。
【讨论】:
【参考方案2】:加入这四个表只是匹配列的问题,然后一切都到位:
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 = ?
...
【讨论】:
代码似乎是正确的,但是当我尝试运行查询时,即使使用 select * 也没有得到任何结果。所有列都显示,但没有行。 @user1025064:?
占位符你用的是什么?
这是我的 sql 代码:select * from reservation join room on reservation.roomnumber = room.roomnumber join roomtype on room.roomtypeid = roomtype.roomtypeid where GuestID = 1
@user1025064:您确定表中的数据正确吗?尝试不使用 WHERE 子句,看看是否一切正常。
@user1025064:您确定表中的数据正确吗?从select * from reservation
开始,逐个添加连接,看看哪里出错了。以上是关于如何用 sqlite 加入这四个表的主要内容,如果未能解决你的问题,请参考以下文章
如何用Entity Framework 6 连接Sqlite数据库