У меня есть странный запрос, который я должен сделать. У меня две таблицы, которые имеют множественное отношение, поэтому таблица моста находится посередине. Стол моста заселен прямо сейчас:SQL JOIN на нескольких возможностях
select
P.RTPropertyUniqueIdentifier
, P.ParcelID
, M.Assessors_Parcel_Identification_Number
, M.FA_Unique_Listing_Identifier_Ref_ID
, M.Property_Type
, M.Property_Address
, P.AddUnitNum
, 0 as multiple_flag
into PP_MLS_BRIDGE
FROM MLS M
join PROPERTY_PARAMETERS P on
replace(replace(M.Assessors_Parcel_Identification_Number, ' ', ''), '.', '') = P.ParcelID;
Вот моя проблема.
Поля объединения: Assessors_Parcel_Identification_Number
и ParcelID
. В одной таблице более 180 миллионов записей и 20 миллионов записей в другой. Моя проблема заключается в том, что есть более чем один способ эти два могут быть отмечены:
Assessors_Parcel_Identification_Number
=ParcelID
replace(replace(M.Assessors_Parcel_Identification_Number, ' ', ''), '.', '')
=ParcelID
replace(replace(replace(M.Assessors_Parcel_Identification_Number, ' ', ''), '.', ''), '_', '')
=ParcelID
и там может быть больше в будущем.
Проблема в том, что я выполняю ситуацию join on OR
, это декартово ответы. Мне нужно одно-единственное соединение в любом ОДНОМ из условий. Как я реструктурирую это, чтобы он сканировал один раз, и если есть соединение в любом из условий, это соединение?
Спасибо. .
Вы ищете технологическое агностическое решение? Я решил что-то подобное, используя ROW_NUMBER, используя SQL Server; Разделите свои результаты с помощью Первичного ключа, затем выберите первый результат по RowNumber. Тем не менее, для 20 миллионов результатов вам может понадобиться другой подход. – KyleUp
Непонятно - может ли таблица быть присоединена, скажем, 2 из этих представлений? Или это упражнение по очистке данных? Я предлагаю вам добавить столбец (либо вычисленный, либо загруженный в пакетном режиме), который выдает правильное значение соединения, а затем просто присоединяется к этому столбцу (другое преимущество состоит в том, что вы можете его индексировать) –
Я думаю, что такая ситуация не поддерживается. Я бы добавил столбец 'ParcelId' в таблицу' MLS', сделайте все возможное, чтобы преобразовать все существующие 'Оценки_Parcel_Identification_Number' в действительный ParcelID и в будущем проверить соответствие во время вставки. – xzoert