【发布时间】:2013-12-23 02:41:15
【问题描述】:
我有两个包含以下数据的表:
TableA.name
R4.23-Core-2
R4.23-Core-2
LA#213 CGHPBXsw01 127.213 0024-737e-e341
LA#252 CGHRack1sw01 127.252 0022-57ab-d781
SOC-01A-SW01
to - R4-DISTR-9512
to-R2-DISTR-5900-1
to-R3.25-EDGE
TableB.caption
R4.23-Core-2.ehd.ca
R4.23-Core-2.nhd.ca
CGHPBXsw01
CGHRack1sw01
SOC-01A-SW01
R4-DISTR-9512
R2-DISTR-5900-1.phsnc.
R3.25-EDGE.phsne.edjc.ca
我已经尝试使用以下 join 语句,但它似乎不适用于任何带有 .在里面。
dbo.TableA.Name
INNER JOIN dbo.TableB.Caption
ON dbo.TableA.Name LIKE '%' + dbo.TableB.Caption + '%'
我也尝试使用替换功能,该功能有效,但替换包含的变体太多。
我可以尝试使用 RIGHT 或 LEFT 函数来规范化数据,但对于没有“。”的行它会抛出一个错误。而且我不知道如何跳过没有'.'的行
连接这两个表最有效的方法是什么?
【问题讨论】:
-
该连接应该可以工作。 TableA 中的哪个项目与 TableB 中的具体不匹配?
-
为什么不添加一个带有某种 id 的列并加入它。
-
@user3072241 如果我理解正确,您是在尝试将 A 中的行与 B 中的行连接起来,其中 B 中的 Caption 列完全包含在 A 的 Name 列中?无论如何,这就是您的联接表达式所说的。我在 SQL Fiddle (SQL Server 2012) 中尝试了这个,它可以按我的预期工作。您使用的是不同的数据库吗?
-
好吧,您加入的是表而不是列,因此您至少必须将其更改为
dbo.TableA INNER JOIN dbo.TableB,然后指定您的加入条件。 -
join 语句有效,但它会省略所有具有 '.' 的行例如 (R4.23-Core-2.nhd.ca)