MS Query - 列1 LIKE列2的外连接?

时间:2016-08-19 18:15:04

标签: sql excel ms-query

任何人都可以帮我创建一个左外连接语句在MS Query中工作吗?

根据Hogan的回答和this MSDN article,我已经编辑了我的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略有不同,我正在努力弄清楚它想要什么。

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

enter image description here

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

enter image description here

我尝试删除oj引用,并抱怨无效的包围:

enter image description here

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

enter image description here

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

要清楚,这就是我希望实现的目标。

鉴于这两个表:
Combo table Inserts table

我想在CO表上进行左连接,匹配IR表上的大小,工具和材料:
Match

应该产生这样的结果:
Desired results

另外,我意识到这将返回" P12"在" P12" " JP12"这真的是理想的行为,但我觉得一旦我得到这个基本查询,我就可以解决这个问题。如果需要,我可以添加一个前导或尾随" /"对于该领域的每一条记录,我都可以匹配" LIKE'%/'"或类似的东西。

4 个答案:

答案 0 :(得分: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 ' %']

答案 1 :(得分: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 + '%']}

答案 2 :(得分: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+'%'))

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

enter image description here enter image description here

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

enter image description here

enter image description here

答案 3 :(得分:0)

归功于Hogan和Brian。

我不得不做一些调整,但结果是以下半工作查询。在MS Query很满意的意义上进行半工作,并创建了预期的结果表,但是没有匹配(或返回)右表中的任何内容。 (所有行都为空)

不确定我是否应该将此问题标记为已回答,并开始一个新问题,说明为什么它没有返回预期数据。
这变成了一点chameleon question,但它在技术上还没有回答(代码没有按预期工作)。

至于我所得到的 - 霍根是正确的,需要删除大括号{}。我还发现我必须删除所有括号[]

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 + '%'