我想减少使用单个查询搜索酒店的代码中的编程逻辑。
假设这是数据库表。一家酒店有多个契约(Contract)。
我想获取满足输入 max_adults 1(容量 1)个房间的房间数、max_adults 2(容量 2)个房间的房间数和 max_adults 2(容量 2)个房间的房间数的所有原始数据最多可容纳 3 名成人(可容纳 3 人)房间。
例如:
Input :必须输出满足所有 3 个条件且具有相同酒店 ID 的行。
2 rooms of max_adults=1(capacity 1)
1 rooms of max_adults=2(capacity 2)
3 rooms of max_adults=3(capacity 3)
如此处所示,输出必须包含酒店 1 和酒店 2 的所有原始数据
由于它们是两个独立的结果,因此需要额外的列来显示生成的 result_id(类似于 here 中的序列号,根据此问题,它必须具有重复项)。
我想了很多方法来做到这一点,但没有一个效果很好。这可以在单个查询中完成吗?
最佳答案
使用自连接:
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
。
每个酒店都会有一行。
关于mysql - 在单个 MySQL 查询中包含复杂的逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31847350/