Sql 如何使用'连接两列;在';语句,如果每列中的值不完全相同?

Sql 如何使用'连接两列;在';语句,如果每列中的值不完全相同?,sql,Sql,我想连接两个不同表中的两列,其中A列中的值与B列中的值不完全相同。我的意思是A列中的值(类型为text)也是B列中值的一部分(类型为text) 我找不到任何符合我需要的SQL操作 例如:这是a列中的值: 'bad-things-gone' 这是B列的对应值: '/article/bad-things-gone' 我正在使用内部连接技术 select articles.title, counted_views.top_counts from articles inner

我想连接两个不同表中的两列,其中A列中的值与B列中的值不完全相同。我的意思是A列中的值(类型为
text
)也是B列中值的一部分(类型为
text

我找不到任何符合我需要的SQL操作

例如:这是a列中的值:

'bad-things-gone'
这是B列的对应值:

'/article/bad-things-gone'
我正在使用内部连接技术

select 
    articles.title, counted_views.top_counts 
from 
    articles 
inner join 
    counted_views on articles.column_A (operation) counted_views.column_B;

如果前缀始终是
/article/
,您可以将其设置为
concat()

SELECT articles.title,
       counted_views.top_counts 
       FROM articles
            INNER JOIN counted_views
            ON counted_views.column_b = concat('/article/', articles.column_a);
如果前缀是可变的,则可以使用类似于的
。它通过简单的模式比较字符串

SELECT articles.title,
       counted_views.top_counts 
       FROM articles
            INNER JOIN counted_views
            ON counted_views.column_b LIKE concat('%', articles.column_a);
%
是任何字符的通配符


如果还有一个后缀,您可以在末尾附加另一个
%

如果前缀始终是
/article/
,您可以只
concat()

SELECT articles.title,
       counted_views.top_counts 
       FROM articles
            INNER JOIN counted_views
            ON counted_views.column_b = concat('/article/', articles.column_a);
如果前缀是可变的,则可以使用类似于
。它通过简单的模式比较字符串

SELECT articles.title,
       counted_views.top_counts 
       FROM articles
            INNER JOIN counted_views
            ON counted_views.column_b LIKE concat('%', articles.column_a);
%
是任何字符的通配符


如果还有一个后缀,您可以在末尾附加另一个
%

有很多方法可以创建这样一个弱连接,它们主要在性能和数据库供应商方面有所不同

一些常用方法,以及产生的连接条件:

规范化字符串,例如删除所有非Alpha字符,并仅对此进行比较

   ON regexp_replace(upper(column_b),[^A-Z],'') = regexp_replace(upper(column_b),[^A-Z],'')
使用返回字符串之间距离的数据库函数(请参见[)


上述函数(如regexp_replace)是oracle特有的,但所有主要数据库都存在类似的功能。

有许多方法可以实现这种弱连接,这些方法主要在性能和数据库供应商方面有所不同

一些常用方法,以及产生的连接条件:

规范化字符串,例如删除所有非Alpha字符,并仅对此进行比较

   ON regexp_replace(upper(column_b),[^A-Z],'') = regexp_replace(upper(column_b),[^A-Z],'')
使用返回字符串之间距离的数据库函数(请参见[)

上述函数(如regexp_replace)是特定于oracle的,但所有主要数据库都存在类似的函数