我有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”。我无法弄清楚。这是对正在发生的事情的直观解释(如果您不想下载文件):
其他两个过滤器可以正常工作,单独使用或组合使用,所有匹配都会按预期返回。正是这个MATERIAL
场让我心痛。如果我从SQL语句中删除其他两个过滤器,我仍然只获得带有材料“333”的记录匹配,如果我从左表中删除该材料,我根本得不到匹配。
有谁知道会导致这种行为的原因是什么? 作为一个完整性检查,我在excel上尝试了这些表格中的vlookup并且它没有问题匹配材料,所以数据是正确的并且匹配。
答案 0 :(得分:1)
有趣的是只有333
匹配。
我认为正在发生的事情是Excel在Material列中看到的第一个值是333,因此它推断列类型是Integer
值,这将限制与其他Integer值的潜在匹配。
您可以通过捏造其他材料代码来测试该理论 - 在每个工作表中创建“444”或其他内容,看看是否匹配。如果是这种情况,确保列的数据类型是您想要的(所有文本,我假设)。
或者,将IMEX=1
添加到连接字符串可能会更容易 - 它会使Excel数据读取器将所有数据视为字符串。