我提前道歉,因为该问题在该站点上以多种形式出现过多次,但是我尝试实施的所有解决方案似乎都无法正常工作,而且我找不到找到正确答案的已回答问题。
我正在为一名同事工作,尽管将来一旦他可以设置服务器就可以使用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]));
现在,我认为该连接条件的后半部分存在问题,但是即使仅使用前半部分,我也会得到零结果。但是,如果我编辑每个表的中间列,然后使用该条件的前半部分,则效果很好。换句话说,如果我使列完全匹配,则查询似乎可以正常工作,这无视使用“ like”联接开头的全部要点。
我尚未在SQLServer中进行过尝试,但是至少无论如何,我都需要使它在Access中正常工作,至少可以作为概念证明。各位女士和先生们可以给我的任何帮助将不胜感激,即使这将我引向了我错过的另一个话题,就像世界末日一样。
最后,如果可能的话,我试图避免使用VBA。
您需要添加通配符,例如在sqlserver中%使用通配符LIKE,否则,它本质上成为对是否相等(=)的检查。这是您使用通配符的查询:
%
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某种兼容的。
int
varchar
但是请注意,join对大型数据集执行“按赞”操作(尤其是使用转换)将导致非常差的性能。
join
编辑:MS Access
当您将int转换为字符串并使用不同的通配符时,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] ) & '*';