如何获得 return 部分匹配 SQL 中其他列的值?

How can I get return value for partially matching another columns in SQL?

在 plsql 中进行以下查询:

Select b.geo, b.country,a.country 
From table_a a
Left join table_b b 
On LTRIM(RTRIM(UPPER(b.country))) = LTRIM(RTRIM(UPPER(a.country)))

假设上述查询 return 输出为

  1. 拉丁美洲哥伦比亚哥伦比亚
  2. 空空 Colombia_group1

我需要 Colombia_group1 它应该 return LATAM.

您可以使用 LIKE:

Select b.geo, b.country,a.country 
From   table_a a
       LEFT OUTER JOIN table_b b 
       ON TRIM(UPPER(a.country)) LIKE TRIM(UPPER(b.country)) || '%'

其中,对于示例数据:

CREATE TABLE table_a ( country ) AS
SELECT 'Colombia' FROM DUAL UNION ALL
SELECT 'Colombia_group1' FROM DUAL;

CREATE TABLE table_b ( country, geo ) AS
SELECT 'Colombia', 'LATAM' FROM DUAL;

输出:

GEO   | COUNTRY  | COUNTRY        
:---- | :------- | :--------------
LATAM | Colombia | Colombia       
LATAM | Colombia | Colombia_group1

db<>fiddle here

您可以使用 LIKE:

Select b.geo, b.country,a.country 
From table_a a Left join
     table_b b 
     On TRIM(UPPER(b.country)) like TRIM(UPPER(a.country)) || '%';

请注意,Oracle 有一个 TRIM() 函数,因此不需要下一个 LTRIM()/RTRIM()