SQL连接问题

时间:2010-09-23 13:54:45

标签: sql oracle

我有一个表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子句以接受内部列。也许我需要以某种方式连接它?

3 个答案:

答案 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
相关问题