gpt4 book ai didi

mysql - 如何比较两个表之间的10个字段

转载 作者:行者123 更新时间:2023-11-29 11:43:34 26 4
gpt4 key购买 nike

我正在尝试将 11 列的表 A 与 13 列的表 B 中的 11 列进行比较,并更改表 B 中的第 12 列(指示符)以确定字段是否匹配。

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

但这导致所有记录的哈希值相同。

我在这里能做什么?请记住,这两个表仅匹配 13 列中的 11 列。谢谢。

最佳答案

只要 JOIN(和 WHERE)条件不包含 OR 或执行函数(例如 DATE >、LEFTTRIM 等),适当构建的索引可以显着提高性能。

“适当构建”是指在其包含的字段中首先具有有用字段的索引;如果您仅根据“谁”加入/过滤,并且您的索引位于“何时和谁”(按该顺序),那么它不会对您有帮助。

关于mysql - 如何比较两个表之间的10个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35350252/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com