我提前道歉,因为这个问题在这个网站上已经多次出现过多种形式,但我尝试实施的解决方案似乎都没有正常工作,我找不到一个能给我正确答案的答案。
我正在为一个同事工作,虽然一旦他可以设置服务器,它将来可能会在SQL中。我试图使用Like连接两个表,这很容易,只是它不能正常工作。首先,每个表中的一个例子:
T1
+-------------------------+--------------------------------------------------------------+--------------+
|LOCATION_CG_LOC_LEGACY_ID|LOCATION_CODE_DESC |PI_LOW_SIDE_MW|
+-------------------------+--------------------------------------------------------------+--------------+
|55555-Opt01 |Autobot Transformer, 800/900 NETWORK, Optimus #1 - 800 NETWORK|5 |
+-------------------------+--------------------------------------------------------------+--------------+
|55555-Opt02 |Autobot Transformer, 800/900 NETWORK, Optimus #2 - 800 NETWORK|6 |
+-------------------------+--------------------------------------------------------------+--------------+
|55555-Opt03 |Autobot Transformer, 800/900 NETWORK, Optimus #3 - 800 NETWORK|6.5 |
+-------------------------+--------------------------------------------------------------+--------------+
T2
+------+-----------------------------------------+------------+
|DIVID |DMT Bank Name |5 Digit Code|
+------+-----------------------------------------+------------+
|647531|800/900 NETWORK, Optimus #1 - 800 NETWORK|55555 |
+------+-----------------------------------------+------------+
|647532|800/900 NETWORK, Optimus #2 - 800 NETWORK|55555 |
+------+-----------------------------------------+------------+
|647533|800/900 NETWORK, Optimus #3 - 800 NETWORK|55555 |
+------+-----------------------------------------+------------+
我试图基本上组合相似的项目,以便我可以执行我想要的任何查询。但是现在,我可以选择全部。我只需要组合相似的项目。在T1中,第一列[LOCATION_CG_LOC_LEGACY_ID]是非重复的唯一项。在T2中,[DIVID]是非重复的唯一项目。我试图使用
一起查询它们SELECT *
FROM [Data Table 1] INNER JOIN [Data Table 2] ON (([t1].[LOCATION_CODE_DESC] Like [t2].[DMT Bank Name]
OR [t2].[DMT Bank Name] Like [t1].[LOCATION_CODE_DESC]) AND ([T1].[LOCATION_CG_LOC_LEGACY_ID] Like [t2].[5 Digit Code] or [t2].[5 Digit Code] Like [T1].[LOCATION_CG_LOC_LEGACY_ID]));
现在,我认为连接条件的后半部分存在问题,但即使仅使用上半部分,我也会获得ZERO结果。但是,如果我编辑每个表中的中间列,那么使用该条件的前半部分,它完美地工作。换句话说,如果我使列完全匹配,则查询似乎有效,这在使用“like”连接开始时无视整个点。
我还没有在SQL Server中尝试过这个,但我至少需要在Access中使用它作为概念证明。女士们,先生们可以给予我的任何帮助都会受到赞赏,即使它指的是另一个我错过的线索。
最后,我尽量避免使用VBA。
答案 0 :(得分:1)
在sqlserver中使用%
时,需要添加LIKE
等通配符,否则它本质上会成为检查相等性(=
)。这是您使用通配符的查询:
SELECT *
FROM t1
INNER JOIN t2
ON [t1].[LOCATION_CODE_DESC] Like '%' + [t2].[DMT Bank Name]+ '%'
AND [T1].[LOCATION_CG_LOC_LEGACY_ID] Like '%' + CONVERT(varchar(50),[t2].[5 Digit Code] )+ '%';
这是一个小提琴:http://sqlfiddle.com/#!3/dc2b9/10/0
为了兼容性,您还需要转换为int
某种varchar
。
请注意,在类似内容上执行join
,尤其是使用转换时,会导致大型数据集的性能非常差。
修改:MS Access
将int转换为string并使用不同的通配符时,MS Access会有所不同。我没有安装访问权限,因此无法测试,但我认为您的MS Access查询将如下所示:SELECT *
FROM t1
INNER JOIN t2
ON [t1].[LOCATION_CODE_DESC] Like '*' & [t2].[DMT Bank Name] & '*'
AND [T1].[LOCATION_CG_LOC_LEGACY_ID] Like '*' & CStr( [t2].[5 Digit Code] ) & '*';
答案 1 :(得分:0)
试试这个并仔细查看格式
--MS SQL
SELECT *
FROM T1
Inner Join T2 on T1.[LOCATION_CG_LOC_LEGACY_ID] Like T2.[5 Digit Code] + '%'
--MS ACCESS
SELECT *
FROM T1
Inner Join T2 on T1.[LOCATION_CG_LOC_LEGACY_ID] Like T2.[5 Digit Code] & '%'