为什么我的 LIKE 过滤器只匹配一个值?
Why does my LIKE filter only match on one value?
我有 this excel file,它在 SQL 查询中给出了意想不到的结果,并根据 LIKE
条件进行了连接。
这里是 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 语句中删除其他两个过滤器,我仍然只会在 material “333” 的记录上获得匹配,如果我从左侧删除 material table,我根本没有匹配。
有谁知道什么会导致这种行为?
作为完整性检查,我在 excel 中对这些 table 尝试了 vlookup,它与 material 匹配没有问题,所以数据是正确的并且确实匹配。
有趣的是只有 333
匹配。
我认为发生的事情是 Excel 在您的 Material 列中看到的第一个值是 333,因此它推断列类型是 Integer
值,这将限制与其他整数值的潜在匹配。
您可以通过伪造其他 material 代码来检验该理论——在每个工作表中创建一个“444”或其他内容,看看是否匹配。如果是这种情况,确保列的数据类型符合您的要求(我假设是所有文本)。
或者,将 IMEX=1
添加到您的连接字符串中可能更容易 -- 它会使 Excel 数据 reader 将所有数据都视为字符串。
我有 this excel file,它在 SQL 查询中给出了意想不到的结果,并根据 LIKE
条件进行了连接。
这里是 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 语句中删除其他两个过滤器,我仍然只会在 material “333” 的记录上获得匹配,如果我从左侧删除 material table,我根本没有匹配。
有谁知道什么会导致这种行为? 作为完整性检查,我在 excel 中对这些 table 尝试了 vlookup,它与 material 匹配没有问题,所以数据是正确的并且确实匹配。
有趣的是只有 333
匹配。
我认为发生的事情是 Excel 在您的 Material 列中看到的第一个值是 333,因此它推断列类型是 Integer
值,这将限制与其他整数值的潜在匹配。
您可以通过伪造其他 material 代码来检验该理论——在每个工作表中创建一个“444”或其他内容,看看是否匹配。如果是这种情况,确保列的数据类型符合您的要求(我假设是所有文本)。
或者,将 IMEX=1
添加到您的连接字符串中可能更容易 -- 它会使 Excel 数据 reader 将所有数据都视为字符串。