我有一个表table_a
,其中包含一个包含以下数据的列:
.aaa01932
.asd02343
.lkj03342
所以它始终以一个句点后跟3个字母开头,然后是2个数字(01,02等),后跟一些额外的数字。
我有另一张表table_b
,其数据如下:
aaa01
asd02
lkj03
因此它映射到table_a
中的数据,但是句点和末尾的额外数字被省略。
如何选择table_a
加入table_b
,其中显示的列中的数据“相等”。相等,我的意思是table_a.the_column
喜欢'%table_b.the_column%'。如下所示:
Select * from table_a
join table_b on (table_a.the_column like '%table_b.the_column%');
除了我不知道如何格式化like子句以接受内部列。也许我需要以某种方式连接它?
答案 0 :(得分:10)
LIKE的语法是:
table_a.the_column like '%' || table_b.the_column || '%'
另一种选择是SUBSTR:
table_b.the_column = substr(table_a.the_column,2,5)
正如一些评论所说,SUBSTR是一种更好的方法,有两个原因:
可以编入索引:
在table_a上创建索引(substr(the_column,2,5));
更准确:您希望仅匹配该位置,而不是
答案 1 :(得分:2)
试试这个:
Select * from table_a
join table_b on (table_a.the_column like '%' || table_b.the_column || '%');
答案 2 :(得分:1)
join table_b on substr(table_a.column,1) = table_b.column