我需要连接2个表,但没有真正的通用字段。在表A中,ID字段包含来自表B的ID,但它在ID之前和之后具有附加字符。使用通配符连接2个表
表A ID 。一个J123 00
表B ID J123
需要根据表B中的J123加入B到A
我怎么能写连接语句加入B表对表A?
使用SQL Sever的2008
我需要连接2个表,但没有真正的通用字段。在表A中,ID字段包含来自表B的ID,但它在ID之前和之后具有附加字符。使用通配符连接2个表
表A ID 。一个J123 00
表B ID J123
需要根据表B中的J123加入B到A
我怎么能写连接语句加入B表对表A?
使用SQL Sever的2008
您可以使用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
产生重复值时,有一个以上的匹配值。
谢谢Gordon,工作正常。 – user3673417
而不是使用连接可以根据子查询从tableA中选择记录,其中a.id IN(选择'%'+ b.id +'%'FROM tableB b) – user3673417
你有什么试过?向我们展示迄今为止您自己解决问题所做的工作? –
试图使用widlcard%和Like而不是= – user3673417
在TableA_ID上加入TableB Like'%'TableB_ID'%' – user3673417