我想减少使用单个查询搜索酒店的代码中的编程逻辑。
假设这是数据库表。一家酒店有几份合同。
我想获得满足max_adults 1(容量1)的房间输入数量的所有原始产品房间数量,房间数量max_adults 2(容量2)房间和房间数量max_adults 3(容量3)房间。
例如:
Input :必须输出满足
2 rooms of max_adults=1(capacity 1)
1 rooms of max_adults=2(capacity 2)
3 rooms of max_adults=3(capacity 3)
same hotel id
的所有3个条件的行。
如此处输出必须包含hotel 1 and hotel 2
由于它们是两个单独的结果,因此需要一个额外的列来显示生成的result_id(here中的序列号类型,必须根据此问题重复)。
我正在考虑很多方法来做到这一点,但没有任何效果。这可以在一个查询中完成吗?
答案 0 :(得分:1)
使用自我加入:
SELECT r1.HOTEL_ID, r1.MAX_ADULTS, r1.NO_OF_ROOMS,
r2.MAX_ADULTS, r2.NO_OF_ROOMS,
r3.MAX_ADULTS, r3.NO_OF_ROOMS,
FROM rooms AS r1
INNER JOIN rooms AS r2 ON r1.HOTEL_ID=r2.HOTEL_ID
INNER JOIN rooms AS r3 ON r1.HOTEL_ID=r3.HOTEL_ID
WHERE r1.MAX_ADULTS=1
AND r2.MAX_ADULTS=2
AND r3.MAX_ADULTS=3
您必须添加子句以检查输入的房间数条件。
生成的result_id 将为r1.HOTEL_ID
。
每家酒店都会有一排。