当没有要连接的键或索引时,在 SQL 中构建人行横道 table

Build a crosswalk table in SQL when no key or index to join on

我得到了一份产品名称列表(每个季度 50-100 个名称),我需要构建一个人行横道 table 从这些宽泛的产品名称到存储在我们产品中的更具体的名称table.

这是我获得的两种产品的示例:

Table A:
FLOVENT
ASMANEX

我上面的产品名称被写入临时 table (Table A) 并且没有键或索引来执行连接到产品 table 其中包含的所有变体我希望从数据库中撤回的产品。

当我使用以下查询查看产品 table (Table B) 时:

SELECT *
FROM
PROD_TABLE AS B
WHERE B.BRAND_NM LIKE '%FLOVENT%' OR B.BRAND_NM LIKE '%ASMANEX%'

我得到以下变体:

ASMANEX HFA                   
ASMANEX TWISTHALER 120 METERED
ASMANEX TWISTHALER 30 METERED 
ASMANEX TWISTHALER 60 METERED
FLOVENT DISKUS                
FLOVENT HFA

我希望避免使用 case 语句作为我在 Table 中的产品列表 A 可以有 50-100 长并且每个季度更新一次,因此我厌恶使用 case 语句。

我如何构建一个人行横道 table,它采用 Table A 中的原始 SQL 查询输入,并显示从 PROD_TABLE (Table B), 这可能吗?

我的 table 看起来像这样:

ORIGINAL_VALUE MATCHED_VALUES
FLOVENT        FLOVENT DISKUS
FLOVENT        FLOVENT HFA
ASMANEX        ASMANEX HFA
ASMANEX        ASMANEX TWISTHALER 120 METERED
ASMANEX        TWISTHALER 30 METERED 
ASMANEX        TWISTHALER 60 METERED

我想我想要实现的是一个模糊匹配连接,如果这在 SQL 中是可能的话。

这是你想要的吗?

SELECT (CASE WHEN P.BRAND_NM LIKE '%FLOVENT%' THEN 'FLOVENT'
             WHEN P.BRAND_NM LIKE '%ASMANEX%' THEN 'ASMANEX'
        END) as match, 
       P.*
FROM PROD_TABLE P
WHERE P.BRAND_NM LIKE '%FLOVENT%' OR P.BRAND_NM LIKE '%ASMANEX%';

您可以使用固定值的连接,如下所示:

SELECT D.PRODUCT as match, 
       P.*
FROM PROD_TABLE P 
JOIN (SELECT 'FLOVENT' PRODUCT FROM DUMMY
      UNION
      SELECT 'ASMANEX' PRODUCT FROM DUMMY) D 
ON P.BRAND_NM LIKE '%' + D.PRODUCT + '%'