Я работаю над проектом по созданию процесса ETL, но застрял на 1 проблеме, где мне нужно вставить данные в таблицу измерений, используя 3 разные таблицы, не имея общего ключа, с помощью которого я могу объединять таблицы. Я пытался решить эту проблему с помощью CTE, но безрезультатно.
Таблица землетрясений с данными
Таблица землетрясений
Таблица городов с данными
Таблица городов
Таблица стран с данными
Таблица стран
** Что я пытаюсь сделать ** Мне нужно найти город, страну и регион мира, где произошло землетрясение, и сохранить полученные значения в разных таблицах. Итак, используя формулу, которая вычисляет расстояние между указанными местоположениями. Первое местоположение, которое я беру из таблицы землетрясений, и второе местоположение из широты и долготы города.
( 6371 * acos( cos( radians(E.Latitude) ) * cos( radians( C.Latitude ) ) * cos( radians( C.Longitude) - radians(E.Longitude) ) + sin( radians(E.Latitude) ) * sin( radians( C.Latitude ) ) ) ) < 100
Здесь C.Latitude
- широта города, а E.Latitude
- широта, где это произошло.
Это мой бесполезный подход CTE.
WITH Test_CTE (
Latitude
,Longitude
,City
,Country
,Region
,Place
)
AS (
SELECT E.Latitude
,E.Longitude
,C.City
,C.Country
,Cntry.Region
,Cast(E.place AS VARCHAR(50))
FROM Earthquake AS E
,(
SELECT Latitude
,Longitude
,Country
,City
FROM City
) AS C
,(
SELECT Country
,Region
FROM Country
) AS Cntry
WHERE (6371 * acos(cos(radians(E.Latitude)) * cos(radians(C.Latitude)) * cos(radians(C.Longitude) - radians(E.Longitude)) + sin(radians(E.Latitude)) * sin(radians(C.Latitude)))) < 100
AND Cntry.Country = C.Country
)
SELECT *
FROM Test_CTE
, который дает этот результат
Результат
Примечание: колонка другие, тогда Город повторяется слишком много раз.
Мои ожидания: В каждой строке таблицы землетрясений есть только 1 ближайший соответствующий город, страна из города, регион из таблицы стран и место из таблицы землетрясений.
Я не работал с таблицами без общего ключа, поэтому понятия не имею, почему и чем вызвана эта проблема. Кто-нибудь может мне помочь? Заранее спасибо