【问题标题】:Joining 2 Tables using a wildcard使用通配符连接 2 个表
【发布时间】:2014-07-19 09:59:48
【问题描述】:

我需要加入 2 个表,但没有真正的公共字段。在表 A 中,ID 字段包含表 B 中的 ID,但在 ID 之前和之后都有其他字符。

表A ID .一个 J123 00

表 B ID J123

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

如何编写 Join 语句将表 B 连接到表 A?

使用 SQL Server 2008

【问题讨论】:

  • 你试过什么?向我们展示您迄今为止为自己解决问题所做的工作?
  • 尝试使用通配符 % 和 Like 而不是 =
  • 在 TableA_ID 上加入 TableB Like '%' TableB_ID '%'

标签: sql


【解决方案1】:

您可以使用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 产生重复值。

【讨论】:

  • 如果使用连接,是否可以基于 a.id IN (Select '%' + b.id + '%' FROM tableB b) 的子查询从 tableA 中选择记录跨度>
猜你喜欢
  • 2015-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-28
  • 1970-01-01
  • 2016-06-07
  • 2014-04-29
  • 1970-01-01
相关资源
最近更新 更多