Итак, я знаю, что объединение трех таблиц задавалось и отвечало раньше, но моя ситуация и запрос немного отличаются, и другие решения не работают для моих нужд.
Итак, у меня есть три таблицы, первая таблица выполняет первичную сортировку / фильтрацию и не имеет первичного ключа, две другие таблицы содержат большую часть информации и используют первичный ключ («Сайт»).).
Я хотел бы получить список сайтов из первой таблицы, а затем объединить все три таблицы на основе результатов.
Я могу сделать это в Python, используя цикл for
, но я думаю, что есть лучший / более лаконичный способ сделать это.
Вот код Python:
q1 = "Select * from Drive where Origin='Seattle,WA' and Hour<3"
q2 = "Select * from Weather Inner Join Site On Weather.Site = Site.Site where Weather.Site='%s'"
for line in conn.execute(q1): # This gets all the Sites from the first table
print(line) # This prints the first table results
print(conn.execute(q2 % line[0]).fetchone()) # This does the Join for the other two tables and prints the results from the two tables
Это работает, и я мог бы использовать это в своем приложении, но это похоже на грубое форсирование, и я уверен, что есть другой / лучший способ.
Когда я сталкиваюсь с проблемами, я возвращаю каждый столбец из всех трех таблиц с предложением where в первом запросе.
И в качестве последующего вопроса скажем, что я хотел поставить еще одно предложение Where'на столе сайта?
Что-то вроде:
q2 = "Select * from Site where Site.HasWater=1 Inner Join Weather On Site.Site = Weather.Site where Weather.Site='%s'"
Любая помощь всегда ценится, спасибо.
Обновлено с соответствующей схемой
3 Базы данных - диск, погода, сайт
Drive - Site, Origin, Hour, Drive
Site - Site, LatLong, HasWater, etc. and about 15 other columns
Weather - Site, RainFall, etc. and 10 other columns
Сайт является основным ключом в таблицах: Сайт иПогода - но это не первичный ключ в накопителе, поскольку столбец «Сайт» не содержит уникальной информации, как в таблицах «Погода» и «Сайт».
Например, вот как выглядит таблица накопителей
Site | Origin | Hour | Drive
Site 1, City 1, 2, 02:30:30
Site 1, City 2, 4, 04:45:57
Site 1, City 3, 1, 01:19:22
Site 2, City 1, 0, 00:56:34
Site 2, City 2, 1, 01:38:06
Site 2, City 3, 2, 02:23:41
Итак, первый запрос - сузить количество сайтов по происхождению и часу, а затем второй запрос - получитьвся информация для каждого из сайтов.
Надеюсь, это поможет.