在单个MySQL查询中包含复杂逻辑

时间:2015-08-06 05:17:18

标签: mysql

我想减少使用单个查询搜索酒店的代码中的编程逻辑。


假设这是数据库表。一家酒店有几份合同。

enter image description here

我想获得满足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中的序列号类型,必须根据此问题重复)。

我正在考虑很多方法来做到这一点,但没有任何效果。这可以在一个查询中完成吗?

1 个答案:

答案 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

每家酒店都会有一排。