2015-01-20 25 views
0

我正在使用SQL Server 2008,並且我有兩個表要加入。我提供了下面的內容,顯示了我的數據的外觀。我想加入給定列上的兩個表,但是我怎樣才能用表B中數字前面的「ID」來做到這一點?我正在考慮加入,但我不知道該怎麼做。在sql中連接表的數據並不完全匹配

喜歡的東西...

Select *      
From TableA AS A   
Left Join TableB AS B   
On A.ColumnA = B.ColumnB   

但是,這是行不通的,因爲數字不完全匹配。

TableA ColumnA 
123   
456   
789   

TableB ColumnB    
ID123     
ID456      
ID789     

我希望我說得夠清楚。有什麼建議麼?

+0

' 。 – DaaaahWhoosh 2015-01-20 19:37:18

+0

@DaaaahWhoosh似乎有一個很好的建議。根據您的數據庫,您可能需要使用「||」連接字符串而不是「+」。另外,如果這些數字實際上是一個數字類型,那麼您可能需要首先將其轉換爲字符串類型。另一種選擇是添加一個適合加入兩個表的計算列的視圖。 – unigeek 2015-01-20 19:43:23

+0

對於所有數據庫,此類代碼不應出現在生產中。在字段上應用函數可防止數據庫使用任何索引,從而導致全表掃描。 *爲什麼*你是否嘗試以這種方式加入餐桌?更好的選擇是拆分ColumnB,可能使用計算列,並在其上創建索引 – 2015-01-20 20:11:55

回答

2

SQL Fiddle Demo

select * 
from tableA a 
join tableB b 
    on 'ID' + cast(columnA as varchar(5)) = b.columnB 
上( 'ID' + A.ColumnA)= B.ColumnB`假設你使用什麼數據庫可以正確地轉換數據類型,你想保持 'ID'
+0

這將導致全表掃描,因爲查詢優化器不能使用任何定義的索引。它可能產生正確的結果,但不能用於生產。此外,由於服務器將任何數字列轉換爲字符串,因此無需強制轉換 – 2015-01-20 19:51:45

+0

如果未明確轉換,數字和int都會在SQL Server 2014中爲我輸入錯誤,因此我將其置於安全的位置。 – SQLChao 2015-01-20 19:58:11

+0

謝謝你的幫助:) – InBetweeny 2015-01-20 21:43:16