【问题标题】:Query showing all records of one table and adding new field查询显示一个表的所有记录并添加新字段
【发布时间】:2016-02-03 14:52:28
【问题描述】:

所以我有 3 个表:

客户 = 客户 ID、客户名称、

房间 = RoomID、RoomName

Booking = BookingID、RoomID、ClientID、Status(3 个可能的值:Booked、Checked-In、Checked-Out)、CheckInDate、CheckOutDate

RoomID 和 ClientID 与 booking 表中的字段是一对多的关系

我的目标是创建一个查询,显示当前时间的所有房间,并显示它们的状态以及居住者的信息(如果有的话)以及每个房间的入住退房时间,这些字段包括:

RoomStatus = RoomName、Status(4 个可能的值:Empty、Booked、Checked-In、Checked-Out(可能不需要,因为住户不再在房间内))、ClientName、CheckInDate、退房日期

我设法创建了简单的查询,该查询使用表之间的关系,显示所有当前使用的房间,显示我需要的所有信息。但是当我无法在查询中显示未使用的房间时,就会出现问题。由于状态字段位于预订表中以保持简单,因此房间表本身没有状态字段可供使用。

我尝试进行空查询,使用房间 id 字段显示房间的所有记录,并创建与具有空值的工作字段相似的新字段,并尝试将其与工作字段合并。但是,左连接只选择相似的记录,最终只显示与以前相同的内容,并且联合提供重复项。但我认为如果这种方法确实有效,那就是“混乱”了。

所以我愿意接受比我提出的方法更好的任何其他方法。非常感谢。

【问题讨论】:

  • 您能否输入您的输入和所需的输出,以便我们找出写下查询/指出正确方向的最佳方法?
  • 如果您将房间表中的已占用房间除外,然后生成第二个查询,最后将结果与第一个查询的结果联合起来,则您的方法将起作用。
  • @Veljko89 编辑问题以便更好地理解
  • @Mahmoud 显然 EXCEPT 方法在 Access Query SQL 中不起作用,但如果有替代方法,我会更多地研究它

标签: sql ms-access


【解决方案1】:

我认为这就是你想要实现的目标

select *
from @room c
left join 
(
select b.*
from @Room r
inner join @Booking b on r.RoomID = b.RoomID
inner join @Client c on c.ClientID = b.ClientID
where CheckInDate = '02/03/2016'
) a on a.RoomID = c.RoomID

在 MS Access 中,这可以通过 2 个步骤来实现。第一步将创建显示此查询结果的查询。

select b.*
from @Room r
inner join @Booking b on r.RoomID = b.RoomID
inner join @Client c on c.ClientID = b.ClientID
where CheckInDate = '02/03/2016'

在第二步中,您将在上面的 QUERY 中对桌子进行左连接。显示来自表室的所有记录,并且仅显示上述查询中连接匹配的那些记录。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-10
    相关资源
    最近更新 更多