【问题标题】:How to merge these queries into 1 using subquery如何使用子查询将这些查询合并为 1
【发布时间】:2015-02-11 13:29:01
【问题描述】:
 Select * from HotelPerson 
 Where RoomID IN (select ID from HotelRoom Where BookingID = 36 )

 Select * from HotelCancelationPolicy 
 Where RoomID IN (select ID from HotelRoom Where BookingID = 36 )

如何将这两个查询合并为 1 个查询?

【问题讨论】:

  • 我假设您希望将两个查询的结果放在一行中?只需在 RoomID 上进行 INNER JOIN

标签: sql subquery correlated-subquery


【解决方案1】:

这将在一个表中为您提供两个表中的所有列。

SELECT * 
FROM HotelPerson A, HotelCancelationPolicy B
WHERE A.RoomID = B.RoomID
AND A.RoomID IN (SELECT ID FROM HotelRoom WHERE BookingID = 36)

【讨论】:

  • 啊,不要使用带有WHERE 子句的隐式连接,使用显式连接。这种语法已经过时了
【解决方案2】:

使用UNION 获取不同元素或UNION ALL 获取两个表中的所有行

 Select * from HotelPerson 
 Where RoomID IN (select ID from HotelRoom Where BookingID = 36 )
 UNION ALL
 Select * from HotelCancelationPolicy 
 Where RoomID IN (select ID from HotelRoom Where BookingID = 36 )

【讨论】:

  • 我不会投反对票,但这是一个巨大(且有缺陷)的假设,即它们的表结构是相同的;否则,UNION 将失败。
【解决方案3】:

我猜你想加入这两个表:

    select * 
      from HotelPerson hp
inner join HotelCancelationPolicy hcp
        on hp.RoomId = hcp.RoomId
     where hp.RoomID IN (select ID 
                           from HotelRoom 
                          where BookingID = 36 )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-15
    • 1970-01-01
    相关资源
    最近更新 更多