SQL将具有相同含义的不同列值分组

时间:2016-02-17 17:43:33

标签: sql postgresql

我的任务是在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。欢迎任何建议,并提前感谢!

2 个答案:

答案 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))