2015-01-20 26 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