首页 > 解决方案 > 获取两个表之间的数据匹配 - 如果至少三个字符匹配或更多

问题描述

如何获得两个表之间的数据匹配,匹配的逻辑应该是 - 如果至少三个字符匹配或更多:

在一张桌子上,我有:

Assets
--------
MADFG
NGGS_Data
KTL_GAS_LCN
FI

在另一个表中:

Asset
------------
VERT
NGS
KTLGAS
FIP

作为我需要的输出:

Asset_table1    Asset_table2
-----------     ------------
NGGS_Data       NGS
KTL_GAS_LCN     KTLGAS

我试图使用来自这个示例链接的查询,但这并没有给我我需要的结果:

谢谢,小号

标签: sqlsql-server

解决方案


您可能需要使用递归 CTE。这给出了预期的结果。

CREATE TABLE #Assets(Assets VARCHAR(20))
CREATE TABLE #Asset(Asset VARCHAR(20))

INSERT INTO #Assets VALUES
('MADFG')
,('NGGS_Data')
,('KTL_GAS_LCN')
,('FI')

INSERT INTO #Asset VALUES
('VERT')
,('NGS')
,('KTLGAS')
,('FIP')

;WITH cteAssets AS
(
    SELECT
        Assets
        ,left(Assets,2) Char2
        ,RIGHT(Assets,len(assets)-1) Rem
    FROM
        #Assets
    WHERE len(Assets) >= 3
    UNION ALL
    SELECT
        Assets
        ,left(Rem,2) Char2
        ,RIGHT(Rem,len(Rem)-1) Rem
    FROM
        cteAssets
    WHERE len(Rem) >= 2
)
SELECT DISTINCT
    A.Assets
    ,B.Asset
FROM
    cteAssets A
        INNER JOIN #Asset B
            ON
            CHARINDEX(A.Char2,B.Asset,0) > 0

推荐阅读