如何解决如何获得部分匹配 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)))
假设上面的查询返回输出为
- LATAM 哥伦比亚 哥伦比亚
- Null null Colombia_group1
我需要 Colombia_group1 它应该返回 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
dbfiddle here
,您可以使用LIKE
:
Select b.geo,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()
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。