3个表之间的SQL查询

3个表之间的SQL查询,sql,select,distinct,contains,Sql,Select,Distinct,Contains,我有3个表,注意这可能不是最好的sql db设计 Room: TypeName, RoomNumber RoomType: TypeName, ... Reservation: StartDate, EndDate, TypeName, RoomNumber 我的输入参数是startdate和enddate。我想知道有哪些不同的房间类型。根据我的理解,解决方案是这样的:AvailableRoomTypes=AllRoomTypes-UnavailableRoomTypes 显然,可以通过以下方

我有3个表,注意这可能不是最好的sql db设计

Room: TypeName, RoomNumber
RoomType: TypeName, ...
Reservation: StartDate, EndDate, TypeName, RoomNumber
我的输入参数是startdate和enddate。我想知道有哪些不同的房间类型。根据我的理解,解决方案是这样的:AvailableRoomTypes=AllRoomTypes-UnavailableRoomTypes

显然,可以通过以下方式找到所有RoomType:从Room中选择DistincTypeName; 我知道如何获得不可用的房间,但不知道不可用的房间类型。我也不知道如何从一组中减去另一组。我可以得到一组所有房间+房间类型和另一组不可用的房间+房间类型,但我如何加入它们,使其成为a-B?也许是某种不包含函数的东西

我希望我的输出参数是从RoomType中选择*以获得合适的RoomType。

未使用的RoomType

select RT.* 
from RoomType RT
where RT.TypeName not in (
   Select RM.TypeName 
   from Room RM
) 
进行A-B选择的一种方法不在选择中。。运算符,不存在选择。。是另一个,我敢肯定还会有更多。

房间:类型名称,房间号房间类型:类型名称。。。预订:开始日期、结束日期、类型名称、房间号

这可能是你的答案。。。 选择rt.typename 来自r房间、rt房间类型、re预订 其中r.typename=rt.typename 和rt.typename=re.typename 其中re.startdate=:开始日期
和re.enddate=:endate

您不想使用联合-SUMreservation.roomtype和SUMservice.servicetype是不同的属性。但是如果您这样做了,您可能希望使用null来偏移查询,这样列就不会重叠。即:

SELECT SUM(reservation.roomtype), NULL ...
UNION ALL
SELECT NULL, SUM(service.servicetype) ...
根据您提供的逻辑,我提出了以下查询:

SELECT SUM(r.roomtype),
       SUM(s.servicetype)
  FROM RESERVATION r
  JOIN BILL b ON b.reservationid = r.reservationid
             AND b.paid = 1
  JOIN SERVICE s ON s.serviceid = b.serviceid

这将返回一行。为了返回更有意义的结果集,我们需要知道依赖于信息组的查询是什么。预订和服务表的详细信息将有助于我们为您提供帮助

什么数据库,你能让它更清楚什么是表,它的列是什么吗?这里是我所拥有的:选择r.roomtype,s.servicename FROM RESERVATION r JOIN BILLING b ON b.reservationid=r.reservationid,b.paid=1 JOIN Customer\u SERVICE s ON s.customerserviceid=b.customerserviceid;我需要计算每个不同预订的billing.total.roomtype和customer_service.servicename的总和。所以我想:为预订选择SUMb.total。。。加入服务的Select SUMb.total@Russ Cam:我不知道什么是“差异联盟”,谷歌表示它也不知道!你愿意为OP的问题贴出一个能证明“差异联盟”的答案吗?但你的观点是正确的,我的回答听起来绝对正确,好像“不开”是解决OP问题的唯一方法。我会重新措辞!tsql中的差异联合:选择废话废话,除了选择废话废话。由于某种原因,这是我无法轻易找到的最终逻辑,尽管它看起来相当基本
SELECT SUM(r.roomtype),
       SUM(s.servicetype)
  FROM RESERVATION r
  JOIN BILL b ON b.reservationid = r.reservationid
             AND b.paid = 1
  JOIN SERVICE s ON s.serviceid = b.serviceid