为什么我的LIKE过滤器仅匹配一个值?

时间:2016-08-23 19:07:57

标签: sql excel ms-query

我有this excel file,它在LIKE条件加入的SQL查询上给出了意想不到的结果。

这是SQL语句:

SELECT CO.MATERIALS, CO.SIZES, CO.TOOLS, IR.PN, IR.BODYJAW

FROM  `CROSSJOIN$` CO
LEFT JOIN `INSERTS$` IR 

    ON CO.TOOLS=IR.TOOL
    AND ((IR.MATERIAL Like '%'+CO.MATERIALS+'%'))
    AND ((IR.SIZE Like '%'+CO.SIZES+'%'))

问题是,IR.MATERIAL的条件 匹配一个值“333”。我无法弄清楚。这是对正在发生的事情的直观解释(如果您不想下载文件):

enter image description here

其他两个过滤器可以正常工作,单独使用或组合使用,所有匹配都会按预期返回。正是这个MATERIAL场让我心痛。如果我从SQL语句中删除其他两个过滤器,我仍然只获得带有材料“333”的记录匹配,如果我从左表中删除该材料,我根本得不到匹配。

有谁知道会导致这种行为的原因是什么? 作为一个完整性检查,我在excel上尝试了这些表格中的vlookup并且它没有问题匹配材料,所以数据是正确的并且匹配。

1 个答案:

答案 0 :(得分:1)

有趣的是只有333匹配。

我认为正在发生的事情是Excel在Material列中看到的第一个值是333,因此它推断列类型是Integer值,这将限制与其他Integer值的潜在匹配。

您可以通过捏造其他材料代码来测试该理论 - 在每个工作表中创建“444”或其他内容,看看是否匹配。如果是这种情况,确保列的数据类型是您想要的(所有文本,我假设)

或者,将IMEX=1添加到连接字符串可能会更容易 - 它会使Excel数据读取器将所有数据视为字符串。