2

谁能帮我创建一个左外连接语句以在 MS Query 中工作?

根据 Hogan 的回答和这篇 MSDN 文章,我已经将我的 SQL 语句编辑到了这个(下),但 MS Query 仍然不满意。

SELECT CO.MATERIALS1 AS 'Material',
       CO.`SIZES#1` AS 'Size', 
       CO.`TOOLS#1` AS 'Tool',
       IR.`BODY /JAW` AS 'BodyJaw', 
       IR.PN AS 'PartNo'
FROM {oj `COMBINATIONS$` CO 
LEFT OUTER JOIN `'INSERTS REVIEW$'` IR 
ON [IR.TOOL LIKE '% ' CO.`TOOLS#1` ' %']
      AND [IR.SIZE LIKE '% ' CO.`SIZES#1` ' %']
      AND [IR.MATERIAL  LIKE '% ' CO.MATERIALS1 ' %']}

MS Query 的语法似乎与我过去使用过的标准 SQL / T-SQL 略有不同,我正在努力弄清楚它想要什么。

上面的查询给了我这个关于期望连接运算符的错误:

在此处输入图像描述

我尝试删除花括号{ },它抱怨表 oj:

在此处输入图像描述

我尝试删除oj引用,它抱怨无效的括号:

在此处输入图像描述

沮丧的是,我尝试删除所有括号,这使它抱怨缺少运算符语法错误:

在此处输入图像描述

除此之外,我在结构、转义字符、连接字符等方面尝试了很多变化。我觉得我只是在这里用 MS Query 旋转我的轮子,并希望更精通 MSQ 细微差别的人可以指出我哪里出错了,并帮助我改正。


需要明确的是,这就是我想要实现的目标。

鉴于这两个表:
组合表 插入表

我想在 CO 表上进行左连接,匹配 IR 表上的尺寸、工具和材料:
匹配

这应该产生这个结果:
期望的结果


另外,我意识到这将在“P12”“JP12”上返回“P12”的匹配项,这并不是真正想要的行为,但我觉得一旦我让这个基本查询工作,我就可以解决这个问题。如果需要,我可能会在该字段中的每条记录中添加前导或尾随“/”,这样我就可以匹配“LIKE '%/'”或类似的东西。

4

4 回答 4

2

这是一个“外部”连接通知,标准是连接的一部分,而不是 where 的一部分。

SELECT CO.MATERIALS1 AS 'Material',
       CO.`SIZES#1` AS 'Size', 
       CO.`TOOLS#1` AS 'Tool',
       IR.`BODY /JAW` AS 'BodyJaw', 
       IR.PN AS 'PartNo'
FROM `COMBINATIONS$` CO
LEFT JOIN `'INSERTS REVIEW$'` IR 
       ON [IR.TOOL LIKE '% ' CO.`TOOLS#1` ' %'] 
      AND [IR.SIZE LIKE '% ' CO.`SIZES#1` ' %'] 
      AND [IR.MATERIAL  LIKE '% ' CO.MATERIALS1 ' %']
于 2016-08-19T20:03:42.213 回答
1

这行得通吗: 编辑

SELECT CO.MATERIALS1 AS 'Material',
       CO.`SIZES#1` AS 'Size', 
       CO.`TOOLS#1` AS 'Tool',
       IR.`BODY /JAW` AS 'BodyJaw', 
       IR.PN AS 'PartNo'
FROM {oj `COMBINATIONS$` CO 
LEFT OUTER JOIN `'INSERTS REVIEW$'` IR 
ON [IR.TOOL LIKE '%' + CO.`TOOLS#1` + '%']
      AND [IR.SIZE LIKE '%' + CO.`SIZES#1` + '%']
      AND [IR.MATERIAL  LIKE '%' + CO.MATERIALS1 + '%']}
于 2016-08-22T16:54:23.873 回答
1

下面的 ms 查询将为您提供确切的结果。我已尝试使用示例数据并附上屏幕截图。

SELECT CO.TOOL, CO.Material, CO.SIZE, IR.PN  , IR.`BODY/JAW`
FROM `G:\test1.xlsx`.`COMBINATIONS$` CO
 LEFT JOIN  `G:\test1.xlsx`.`'INSERTS REVIEW$'` IR
 ON CO.TOOL=IR.TOOL
 AND ((IR.MATERIAL Like '%'+CO.Material+'%')) 
 AND ((IR.SIZE Like '%'+CO.Size+'%'))

测试数据显示在下面的屏幕截图中。

在此处输入图像描述 在此处输入图像描述

以下屏幕截图包含您想要的 ms 查询和结果。

在此处输入图像描述

在此处输入图像描述

于 2016-08-22T20:52:42.457 回答
0

归功于霍根和布赖恩。

我不得不做一些调整,但最终得到了以下半工作查询。从某种意义上说,MS Query 很高兴,并创建了预期的结果表,但没有匹配(或返回)来自正确表的任何内容。(所有行都为空)

不知道我是否应该将此问题标记为已回答,并开始一个关于为什么它没有返回预期数据的新问题。
这已经变成了一个变色龙问题,但在技术上也没有得到解答(代码没有按预期工作)。


就我所掌握的 - Hogan 是正确的,{}需要移除牙套。我还发现我必须删除所有的括号[]

Brian 在+需要的连接字符方面是正确的。

所以我最终得到了这个半工作的 SQL 语句:

SELECT CO.MATERIALS1 ,
       CO.`SIZES#1` , 
       CO.`TOOLS#1` ,
       IR.`BODY /JAW` , 
       IR.PN 
FROM  `COMBINATIONS$` CO 
LEFT OUTER JOIN `'INSERTS REVIEW$'` IR 
ON IR.TOOL LIKE '%' + CO.`TOOLS#1` + '%'
      AND IR.SIZE LIKE '%' + CO.`SIZES#1` + '%'
      AND IR.MATERIAL  LIKE '%' + CO.MATERIALS1 + '%'
于 2016-08-22T17:54:01.947 回答