Postgres使用LIKE进行连接

3
在 PostgreSQL 中,我有一张表。
tbl1
id -- RCODE -- COUNTRY --
1     US/MSR   United states of America
2     GY/LSR   Germany
3     CA/FSA   Canada

tbl2
id -- Name -- CCODE
33    T1      US        
44    Y1      CA       
55    W1      GY  

可以在tbl1的RCODE字段与tbl2的CCODE字段上使用LIKE条件进行表连接吗?这样,我将获得以下结果:

id --NAME-- RCODE -- CCODE--- COUNTRY

我将提供tbl2的ID,例如:当我提供ID 44时,结果将是

id --NAME-- RCODE -- CCODE--- COUNTRY
44   Y1     CA/FSA   CA       Canada

我希望有人能够帮助我解决这个查询问题,它与PostgreSQL相关。

一个问题是RCODE的前两个字符与表2中的CCODE相同。

2个回答

6
select tbl2.name, tbl1.rcode, tbl2.ccode, tbl1.country
from tbl1 
  join tbl2 on substring(tbl1.rcode, 1, 2) = tbl2.ccode

如果@cc4re觉得有帮助的话,请考虑点赞并将答案标记为正确答案 :) - tftd
3
如果需要一个智能且小的索引,请使用相同的表达式:CREATE INDEX smart_ids ON tbl1 (substring(tbl1.rcode, 1, 2)); - Frank Heikens
1
在PostgreSQL 9.1或更高版本中,您可以使用更简单的left()函数来实现此目的:JOIN tbl2 ON left(tbl1.rcode, 2) = tbl2.ccode - Erwin Brandstetter
可以使用LIKE和通配符%来实现吗? - cc4re
@cc4re:没问题,只需将它放入“ON”条件即可。 - user330315

1
对于类似的问题,我使用了类似以下代码的东西:

select
tbl2.id as id,
tbl2.name as NAME,
tbl1.rcode as RCODE,
tbl1.ccode as CCODE,
tbl1.country as COUNTRY
from tbl1, tbl2
where substring(tbl1.rcode, 1, 2) = tbl2.ccode;

子字符串表达式中的数字是子字符串第一个字符的基于1的索引和子字符串的长度。

其他字符串运算符,例如trim()、lower()和upper()也很有用。可用字符串运算符的更完整列表在以下网址:

http://www.postgresql.org/docs/9.3/static/functions-string.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接