2010-09-23 66 views
2

我有一個表table_a與含數據列如下:SQL加入問題

.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%'); 

除了我不知道如何格式化喜歡的子句接受列內。也許我需要以某種方式連接它?

+0

通過使用「% '在開始時,您將無法在此字段上使用任何索引,因此加入此列時效率不高。 – guigui42 2010-09-23 13:59:46

回答

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));

  • 更準確的:你想只在那個位置列

+2

該死的,只有三秒! :) – 2010-09-23 13:58:02

+0

是的,這是正確的 – Micah 2010-09-23 13:59:46

+0

substr將在這種情況下更適合(固定長度),我們至少可以使用索引。 – guigui42 2010-09-23 14:04:29

2

之間是否匹配,而不是試試這個:

Select * from table_a 
    join table_b on (table_a.the_column like '%' || table_b.the_column || '%'); 
1
join table_b on substr(table_a.column,1) = table_b.column 
+0

我想不會有效。 – 2010-09-23 13:59:18

+0

我相信這是比LIKE更好的選擇,因爲我們可以在這種情況下使用索引。也更確切地說:substr(table_a.column,2,5) – guigui42 2010-09-23 14:02:52

+0

我的意思是'substr('。aaa01932',1)'會產生''aaa01932'',然後我們會嘗試加入這個條件'' aaa01932'='aaa01'' – 2010-09-23 14:04:40