На основе набора данных airbnb мне нужно выяснить, у каких хостов есть несколько комнат в одном месте.
У меня есть две таблицы: airbnb и airbnb_locations
Первые шесть рядов airbnbтаблица выглядит следующим образом:
host_id room_id latitude longitude
2536 2318 47.61 -122.29
35749 4291 47.68 -122.31
8993 5682 47.52 -122.35
14942 6606 47.65 -122.33
30559 9419 47.55 -122.31
30832 9460 47.60 -122.32
Первые шесть строк таблицы airbnb_locations выглядят так:
room_id latitude longitude
2318 47.61 -122.29
4291 47.68 -122.31
5682 47.52 -122.35
6606 47.65 -122.33
9419 47.55 -122.31
9460 47.60 -122.32
Таким образом, единственная разница между таблицами - это атрибут host_id.
Это была моя первая попытка:
select distinct t1.host_id, t1.room_id, t1.latitude, t1.longitude
from airbnb t1 inner join airbnb_locations t2
where t1.latitude = t2.latitude
and t1.longitude = t2.longitude
and t1.room_id <> t2.room_id
Проблема с этим кодом заключается в том, что он также дает комнаты, принадлежащие разным хостам в одном месте.Я попытался сгруппировать комнаты по хостам, но по какой-то причине это дает мне неправильные результаты.
Решением может быть добавление атрибута host_id в airbnb_locations, а затем:
select distinct t1.host_id, t1.room_id, t1.latitude, t1.longitude
from airbnb t1 inner join airbnb_locations t2
where t1.host_id = t2.host_id
and t1.latitude = t2.latitude
and t1.longitude = t2.longitude
and t1.room_id <> t2.room_id
Но тогда яУ меня осталось два одинаковых стола, и я не совсем уверен, в чем был смысл этого упражнения.Поэтому мне любопытно, упустил ли я очевидное решение для решения проблемы на основе двух исходных таблиц с использованием функции соединения?