gpt4 book ai didi

sql - 将 WHERE 语句添加到引用 ODBC 链接的子查询时访问查询失败

转载 作者:行者123 更新时间:2023-12-04 14:09:55 25 4
gpt4 key购买 nike

原帖

给定两个结构如下的表:

t1 (finished goods)      t2 (component parts)

sku | desc | fcst sku | part | quant
0001 | Car | 10000 0001 | wheel | 4
0002 | Boat | 5000 0001 | door | 2
0003 | Bike | 7500 0002 | hull | 1
0004 | Shirt | 2500 0002 | rudder | 1
... | ... | ... 0003 | wheel | 2
0005 | rotor | 2
... | ... | ...

我正在尝试将车轮要求附加到预测中,同时将所有记录保留在预测中。我的结果如下所示:
sku  | desc  | fcst  | wheels | wheelfcst
0001 | Car | 10000 | 4 | 40000
0002 | Boat | 5000 | |
0003 | Bike | 7500 | 2 | 15000
0004 | Shirt | 2500 | |
... | ... | ... | ... | ...

在我看来,最有效的方法是这样的查询:
SELECT 
t1.sku,
t1.desc,
t1.fcst,
q.quant as wheels,
t1.fcst * q.quant as wheelfcst
FROM
t1
LEFT JOIN
(
SELECT *
FROM t2
WHERE part LIKE "wheel"
)
as q
ON t1.sku = q.sku

问题是它给出了一个非常详尽的 Invalid Operation.运行时出错。

如果我删除 WHERE声明:我得到了所需的轮子零件,但我也拉门、船体和方向 Helm 的数量。

如果我移动 WHERE对主查询 ( WHERE q.part LIKE "wheel") 的声明:我只看到包含轮子的 cargo ,但结果中缺少船。

我考虑过 UNION语句,取前面提到的移动 WHERE的结果超出子查询( WHERE q.part LIKE "wheel"),但似乎没有一个好的方法来获取每个没有轮组件的最终项目,因为每个 sku可以有从 0 到许多组件的任何地方。

在我想要的查询中是否有一些我忽略的东西,或者这是否需要 UNION方法?

编辑#1 - 回答安德烈提出的问题

Screenshot of my personal issue.
  • 完整的错误信息是 Invalid operation.
  • skut1 的主键, 共有 1426 条记录。
  • t2包含约 446,000 条记录,主键是 sku 的组合和 part .
  • 实际WHERE语句是部分搜索。所有“轮子”都有相同的后缀,但部件编号不同。

  • 另外,我在 Access 2007 中,可能是与软件版本有关的问题。

    将子查询变成临时表是可行的,但目标是避免该过程。

    编辑#2 - 我的环境中的一个缺陷

    My test case results

    我创建了一个与我在此处发布的相同的测试场景,并且得到了与 Andre 相同的结果。在这一点上,将这些结果与临时表方法确实有效的事实相结合,我被引导相信这是查询复杂性和记录访问的问题。尽管错误消息不是典型的 Query is too complex.信息。

    编辑#3 - 深入挖掘“复杂性”

    我的下一个测试将是使 where 子句更简单。可悲的是,我每天午餐时工作的系统都会更新,目前我无法访问任何数据服务器。我希望在今天晚些时候更新我的进度。

    编辑 #4 - 替换部分搜索

    好的,我们开会回来准备出发了。我刚刚用三个不同的 WHERE 运行了六个查询条款:
    WHERE part LIKE "*heel"/ WHERE component_item LIKE "*SBP" (原大规模发行)
    用于小规模测试, Invalid operation大规模。
    WHERE part LIKE "wheel"/ WHERE component_item LIKE "VALIDPART" (原小规模)
    用于小规模测试, Invalid operation大规模。
    WHERE part LIKE "wh33l"/ WHERE component_item LIKE "NOTVALIDPART" (不返回任何记录的 where 语句)
    Small Scale 
    sku | desc | fcst | wheels | wheelfcst
    0001 | Car | 10000 | |
    0002 | Boat | 5000 | |
    0003 | Bike | 10000 | |
    0004 | Shirt | 5000 | |

    Large Scale
    sku |description |forecast |component_item |dip_rate
    #####|RealItem1 | ###### | |
    #####|RealItem2 | ###### | |
    #####|RealItem3 | ###### | |
    ... |... | ... | |

    Tl;博士除非过滤器导致返回 0 条记录的子查询,否则过滤器的细节不会产生影响。

    编辑#5 - 一个有趣的结果

    在尝试所有可能的解决方案并尽可能测试一切的想法下,我制作了一个本地临时表,其中包含 t2 中的每个字段和每条记录(~25MB)。引用此表而不是指向 t2 的 ODBC 链接适用于部分搜索查询 ( WHERE component_item LIKE "*SBP" )。我正在更新此问题的标题以反射(reflect)该问题特定于链接表。

    最佳答案

    我将示例数据复制到 Access 2010 并运行查询,它没有问题。

    datasheet view of query

    您收到的完整错误消息是什么? (“非常复杂的无效操作。”)

    您的表中有多少条记录?

    sku t1 中的主键?

    无论如何,我建议将子查询更改为:

    SELECT sku, quant
    FROM t2
    WHERE part = "wheel"
    LIKE仅部分搜索需要。

    关于sql - 将 WHERE 语句添加到引用 ODBC 链接的子查询时访问查询失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34928576/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com