2014-07-18 33 views
-1

我需要连接2个表,但没有真正的通用字段。在表A中,ID字段包含来自表B的ID,但它在ID之前和之后具有附加字符。使用通配符连接2个表

表A ID 。一个J123 00

表B ID J123

需要根据表B中的J123加入B到A

我怎么能写连接语句加入B表对表A?

使用SQL Sever的2008

+0

你有什么试过?向我们展示迄今为止您自己解决问题所做的工作? –

+0

试图使用widlcard%和Like而不是= – user3673417

+0

在TableA_ID上加入TableB Like'%'TableB_ID'%' – user3673417

回答

0

您可以使用like。性能不好,但它可以工作:

select * 
from tableA a join 
    tableB b 
    on a.id like '%' + b.id + '%'; 

请注意,这可能会做出意想不到的事情。例如,值为10的所有ID将与100匹配。除非你有某种方式知道a中的哪些字符实际上是id字段,否则你可能必须忍受这一点。

而且,这种情况发生在人们希望表的主键意味着什么时。这是匿名主键的一个很好的参数。没有人会想到试图解释它。如果有人需要关于它的信息,他们可以在适当的表格中查找它。

编辑:

,如果你喜欢,你可以使用exists条款这样写:

select * 
from tableA a 
where exists (select 1 from tableB b where a.id like '%' + b.id + '%'); 

这不会tableA产生重复值时,有一个以上的匹配值。

+0

谢谢Gordon,工作正常。 – user3673417

+0

而不是使用连接可以根据子查询从tableA中选择记录,其中a.id IN(选择'%'+ b.id +'%'FROM tableB b) – user3673417