我的任务是在postgres中使用SQL查询将两列匹配在一起。在我的任务中,我需要使用相同的ID匹配两个不同名称但相同含义的列。下面我将说明这一点:
表1
name ,Group
Terminal point 1 ,Terminal
Terminal point town 1,Terminal
Terminal point 2 ,Terminal
Terminal point 3 ,Terminal
表2
Name ,ID
Terminal 1,T01
Terminal 1,T01
Terminal 2,T002
Terminal 3,T0003
输出表
Name ,Group , ID
Terminal Point 1 , Terminal, T01
Terminal Point town 1 , Terminal, T01
Terminal Point 2 , Terminal, T002
Terminal Point 3 , Terminal, T0003
我尝试过使用group by和inner连接以及ID的第一个和最后一个字符的substr,但我无法这样做,因为在postgres sql查询中不允许使用len。欢迎任何建议,并提前感谢!
答案 0 :(得分:0)
看起来匹配可能是这样的:
select t1.*, t2.id
from table1 t1 join
table2 t2
on t2.name = replace(name, 'point ', '');
至少,某种字符串操作似乎是必要的。
答案 1 :(得分:0)
您可以尝试使用text search
select
to_tsvector('Terminal point 1') @@ plainto_tsquery('Terminal 1'), -- True
to_tsvector('terminal Point town 1') @@ plainto_tsquery('Terminal 1'), -- True
to_tsvector('Terminal point 2') @@ plainto_tsquery('Terminal 1'), -- False
to_tsvector('Terminal point 2') @@ plainto_tsquery('Terminal 2'); -- True
所以你的查询应该是
select
*
from
table1 t1
join (select distinct * from table2) t2 on (to_tsvector(t1.name) @@ plainto_tsquery(t2.name))