Похоже, что ваш запрос неверен с предложением FROM ... похоже, псевдонимы не в порядке
from room_price a, room_price,a1 room_price,room_price a2
и должно быть
from room_price a, room_price a1, room_price a2
То, что МОЖЕТ давать запросу ложный псевдоним / дополнительную таблицу, давая какой-то декартово произведение, заставляющее его зависать ...
--- хорошо в предложении FROM ...
Кроме того, и просто мысль ... Так как "Комната" представляется внутренним столбцом идентификатора с автоматическим приращением, она никогда не будет дублироваться, например Комната 100 в отеле A и Комната 100 в отеле B. Ваш запрос делать <> в комнате имеет смысл, так что вы никогда не будете сравнивать по всем направлениям на всех 3 столах ...
Почему бы не заставить объединения a1 и a2 претендовать только на комнату БОЛЬШЕ, чем комната "a". В противном случае вы будете повторно тестировать одни и те же условия снова и снова. Исходя из данных вашего примера, как раз в отеле A, у вас есть номера комнат 1, 2 и 3. Таким образом, вы сравниваете
a a1 a2
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
Поможет ли сравнение только там, где "a1" всегда больше, чем "a", а "a2" всегда больше, чем "a1", таким образом, выполняя тесты
a a1 a2
1 2 3
даст те же результаты, что и все остальные, и, таким образом, увеличит ваш результат до одной записи в этом случае ... но затем, как вы можете действительно сравнить с местоположением только ДВУХ типов номеров "hotel B". Вы НИКОГДА не получите ответ, так как ваша квалификация для номеров
a <> a1 AND
a <> a2 AND
a1 <> a2
Возможно, вы захотите попытаться сократить только одно самостоятельное соединение для a1, a2 и оставить сравнение только для двух, например
select a1.hotel, a1.price + a2.price
from room_price a1, room_price a2
where a1.hotel = a2.hotel
and a2.room > a1.room
For hotel "A", you would thus have final result comparisons of
a1 a2
1 2
1 3
2 3
and for hotel "B"
a1 a2
4 5