Я пытаюсь сравнить таблицу 11 столбцов с 11 таблицей 13 столбцов и изменить 12-й столбец (индикатор) в таблице Б на соответствие или совпадение полей.Как сравнить 10 полей между двумя таблицами
SET SQL_SAFE_UPDATES=0;
UPDATE `DDL_STAGING`.`MTDT_STG` S
INNER JOIN `REFERENCE`.`REF_DATA_MODELS` D
ON S.`MDL_LAYER` = D.`MDL_LAYER`
AND S.`SBJT` = D.`SBJT`
AND S.`SCHEMA_NM` = D.`SCHEMA_NM`
AND S.`TBL_NM` = D.`TBL_NM`
AND S.`TBL_TYPE` = D.`TBL_TYPE`
AND S.`CLMN_NM` = D.`CLMN_NM`
AND S.`CLMN_DTYP` = D.`CLMN_DTYP`
AND S.`NULL_IND` = D.`NULL_IND`
AND S.`PK_IND` = D.`PK_IND`
AND S.`DFLT_VAL` = D.`DFLT_VAL`
AND S.`FK_TBL_ID` = D.`FK_TBL_ID`
AND S.`FK_CLMN_ID` = D.`FK_CLMN_ID`
AND S.`CLMN_ORD`= D.`CLMN_ORD`
SET S.ACTN_IND = 'U';
SET SQL_SAFE_UPDATES=1;
Естественно, это берет навсегда и запирает верстак дважды. Я попытался ввести хэш-проверки, так что я могу сравнить 1 колонка:
MD5(M.MDL_LAYER_ID |'~'| PKG.LOGL_PKG_NM | '~' | PC.PHYS_TBL_SCHEMA | '~' | PC.PHYS_TBL_NM | '~' |
PC.PHYS_TBL_TYPE |'~'| PC.PHYS_CLMN_NM |'~'| PC.PHYS_CLMN_DTYP | '~' | PC.PHYS_CLMN_NULL | '~' |
CASE WHEN PK.PHYS_CLMN_ID IS NOT NULL THEN 'Y' ELSE NULL END | '~' | PC.PHYS_CLMN_DFLT_VAL | '~' |
F.Ttbl | '~' | F.Tcol) AS HASH_VAL
Но при заполнении столбцов, но некоторые столбцы равны нулю, в результате которых в много нулевых записей в столбце HASH_VAL. Я не могу сравнивать.
Так что я попытался ввода:
MD5(M.MDL_LAYER_ID |'~'| ifnull(PKG.LOGL_PKG_NM,'') | '~' | ifnull(PC.PHYS_TBL_SCHEMA,'') | '~' | ifnull(PC.PHYS_TBL_NM,'') | '~' |
ifnull(PC.PHYS_TBL_TYPE,'') |'~'| ifnull(PC.PHYS_CLMN_NM,'') |'~'| ifnull(PC.PHYS_CLMN_DTYP,'') | '~' | ifnull(PC.PHYS_CLMN_NULL,'') | '~' |
CASE WHEN PK.PHYS_CLMN_ID IS NOT NULL THEN 'Y' ELSE '' END | '~' | ifnull(PC.PHYS_CLMN_DFLT_VAL,'') | '~' |
ifnull(F.Ttbl,'') | '~' | ifnull(F.Tcol,'')) AS HASH_VAL
Но это привело к ОДНОГО HASH значение для всех recors.
Что я могу сделать здесь? помните, что две таблицы соответствуют только 11 из 13 столбцов. Спасибо.
Какие индексы у вас есть на этих таблицах? Сколько строк в таблицах? и т. д. – Uueerdo
Я думал не по порядку. Я включил индекс после загрузки. Я изменил его, чтобы добавить индекс после создания DDL. Поместите индекс в качестве ответа, чтобы я мог проверить его. благодаря – arcee123