一尘不染

Access / SQL Server 2008加入“赞”无法正常工作

sql

我提前道歉,因为该问题在该站点上以多种形式出现过多次,但是我尝试实施的所有解决方案似乎都无法正常工作,而且我找不到找到正确答案的已回答问题。

我正在为一名同事工作,尽管将来一旦他可以设置服务器就可以使用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。


阅读 163

收藏
2021-05-16

共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

您还需要转换为intvarchar某种兼容的。

但是请注意,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] ) & '*';
2021-05-16