我有两个表 - 输入:
输入表
ait_不 | schema_nm | 列_nm | 表_nm |
---|---|---|---|
1 | 艾克 | ssn | 原文如此 |
2 | 艾克 | ssn_1 | bhue_tab |
1 | 艾滋 | ssn_no | eyfu_tab |
1 | 艾滋 | ssn_号码 | gic_选项卡 |
2 | 艾克 | is_snn_no | yfjs_选项卡 |
2 | 艾克 | is_snn_number | yfjs_选项卡 |
外部参照表:
keywords_primary | 关键词_次要 | 实体_类别 | excld_sw |
---|---|---|---|
ssn | 不 | snn | 0 |
ssn | 数字 | ssn | 0 |
ssn | 是 | ssn | 1 |
我想在以下条件下加入此表
我有这个疑问:
SELECT input.ait_no,
input.schema_nm,
input.table_nm,
input.column_nm,
xref.entity_category
FROM input_table input
INNER JOIN xref_table xref
ON ( ( ( input.column_nm LIKE
'%[^a-zA-Z]' + xref.keywords_primary
+ '[^a-zA-Z]%' )
OR ( input.column_nm LIKE xref.keywords_primary +
'[^a-zA-Z]%' )
)
AND ( ( input.column_nm LIKE
'%[^a-zA-Z]' + xref.keywords_secondary
+ '[^a-zA-Z]%' )
OR ( input.column_nm LIKE xref.keywords_secondary +
'[^a-zA-Z]%' )
OR ( input.column_nm LIKE
'%[^a-zA-Z]' + xref.keywords_secondary ) ) )
OR ( REPLACE(input.column_nm, xref.keywords_primary, '') NOT
LIKE
'%[a-zA-Z]%' )
GROUP BY input.ait_no,
input.schema_nm,
input.table_nm,
input.column_nm,
xref.entity_category
HAVING NOT Max(xref.excld_sw) = 1
这里由于此连接条件( REPLACE(input.column_nm,xref.keywords_primary,'') 不像 '%[a-zA-Z]%')而导致的所有结果都不会返回,因为我只使用 Primary_keyword 并且有许多 keywords_secondary 被分配给它,并且 excld_sw 设置为 1,因此它们被消除,例如:( ssn_1 匹配但未返回,因为主 _keyword、辅助关键字 'ssn' 和 'is' 设置为 1)。
这里我如何获得满足 group by 和having 子句的结果集以及满足( REPLACE(input.column_nm,xref.keywords_primary,'') 不像 '%[a-zA-Z]%')的行即使 group by 和having 没有满足,加入时的条件也没有满足。
输出表
ait_不 | schema_nm | 列_nm | 表_nm | 实体_类别 |
---|---|---|---|---|
1 | 艾克 | ssn | 原文如此 | ssn |
2 | 艾克 | ssn_1 | bhue_tab | ssn |
1 | 艾滋 | ssn_no | eyfu_tab | ssn |
1 | 艾滋 | ssn_号码 | gic_选项卡 | ssn |
创建一个临时表并尝试一下
CREATE TEMPORARY TABLE temp_join_results AS
SELECT input.ait_no,
input.schema_nm,
input.table_nm,
input.column_nm,
xref.entity_category
FROM input_table input
INNER JOIN xref_table xref
ON ( ( ( input.column_nm LIKE
'%[^a-zA-Z]' + xref.keywords_primary
+ '[^a-zA-Z]%' )
OR ( input.column_nm LIKE xref.keywords_primary +
'[^a-zA-Z]%' )
)
AND ( ( input.column_nm LIKE
'%[^a-zA-Z]' + xref.keywords_secondary
+ '[^a-zA-Z]%' )
OR ( input.column_nm LIKE xref.keywords_secondary +
'[^a-zA-Z]%' )
OR ( input.column_nm LIKE
'%[^a-zA-Z]' + xref.keywords_secondary ) ) )
OR ( REPLACE(input.column_nm, xref.keywords_primary, '') NOT
LIKE
'%[a-zA-Z]%' ));
-- Select results from the temporary table that fulfill the HAVING clause
SELECT tjr.ait_no,
tjr.schema_nm,
tjr.table_nm,
tjr.column_nm,
tjr.entity_category
FROM temp_join_results tjr
WHERE tjr.ait_no IN (
SELECT tjr_inner.ait_no
FROM temp_join_results tjr_inner
GROUP BY tjr_inner.ait_no
HAVING NOT MAX(tjr_inner.excld_sw) = 1
);