Sql 如何使用'连接两列;在';语句,如果每列中的值不完全相同?
我想连接两个不同表中的两列,其中A列中的值与B列中的值不完全相同。我的意思是A列中的值(类型为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
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的,但所有主要数据库都存在类似的函数