【发布时间】:2023-03-28 23:49:01
【问题描述】:
我正在尝试在 Oracle 中创建一个视图,以显示酒店中所有未预订的可用房间。
如果他们被预订了,RoomBasket 中就会有记录。所以我试图在入住和退房日期之间选择所有不在 RoomBasket 中的房间(RoomBasket.datein、RoomBasket.dateout)
但是当我使用内部联接和外部(左/右)联接时,查询一直返回 0 个结果,我认为这是因为它没有加入日期表,所以它会有 0 个结果。所以现在我正在尝试对记录所有房间的 Room 表进行联合,因为我认为这会选择所有房间,然后否定已预订的房间?
我的语法不正确,我玩弄了这个查询的大量形式:
CREATE VIEW availability AS
(SELECT * FROM RoomBasket rb
WHERE TO_DATE(SYSDATE, 'yyyymmdd')
NOT BETWEEN TO_DATE(rb.datein, 'yyyymmdd') AND TO_DATE(rb.dateout, 'yyyymmdd')
UNION (SELECT r.id room, rt.type type, rt.price price FROM Room r, RoomType rt)
);
但如果它有效,我会得到 0 个结果,如果它不起作用,我会得到语法错误。目前的错误是:
查询块的结果列数不正确
【问题讨论】:
-
不要在第一个查询中使用
SELECT *,实际列出你需要的列。UNION要求所有查询中的列数相同。 -
@bluefeet 好的,谢谢!
标签: sql database oracle join union