两个查询之间的内部联接导致“无效操作”

Posted

技术标签:

【中文标题】两个查询之间的内部联接导致“无效操作”【英文标题】:Inner Join between 2 queries resulting in "Invalid Operation" 【发布时间】:2015-09-21 16:17:06 【问题描述】:

为了创建满足某些条件的订单列表(每个包含多个项目),我尝试创建一个典型的LEFT JOIN 语句。

尝试看起来像这样

SELECT 
  Q1.Order_Number, 
  OD.Item_Num
FROM
  (
  SELECT
    OS.Order_Number
  FROM 
    [4-Open_Order_Summary] AS OS 
  WHERE
    Date() >= OS.Ship_Date AND
    OS.Back_Ordered > 0
  )
  AS Q1
  LEFT JOIN [1-Open_Order_Data] AS OD 
  ON Q1.Order_Number = OD.Order_Number

运行此查询会给我一个无法解释的“无效操作”错误。研究有关 Access SQL 的此错误使我在 *** 上提出了与多个不同类型的多个 JOIN 语句有关的 this 问题,以及与 FULL OUTER JOIN 语句有关的 SuperUser 分支上的 this 问题。但是,我找不到与单个 LEFT JOIN 语句相关的问题。

为了解决这个问题,我做了以下事情;

更改ON Q1.Order_Number = OD.Order_NumberON Q1.Order_Number LIKE OD.Order_Number 访问崩溃

跑步

SELECT 
  Q1.Order_Number, 
FROM
  (
  SELECT
    OS.Order_Number
  FROM 
    [4-Open_Order_Summary] AS OS 
  WHERE
    Date() >= OS.Ship_Date AND
    OS.Back_Ordered > 0
  )
  AS Q1  

返回预期的订单号。

【问题讨论】:

【参考方案1】:

如果您想从一个表中获取订单号,并从另一个表中获取相关的订单详细信息,为什么不尝试以下方法?

SELECT
    Q1.Order_Number
    OD.Item_Num
FROM
    [4-Open_Order_Summary] Q1
LEFT JOIN
    [1-Open_Order_Data] OD
        ON
            OD.Order_Number = Q1.Order_Number
WHERE
    DATE() >= Q1.Ship_Date
    AND Q1.Back_Ordered > 0

【讨论】:

这确实解决了我的问题,并获得了预期的结果。我计划把这个问题留到明天,以防其他人看到这可以用一些语法知识来解释为什么我所做的不起作用。感谢您的帮助! 附带说明,您可以在此处使用 INNER JOIN。这将允许您仅根据您的 ON 条件提取两个表中存在的记录。

以上是关于两个查询之间的内部联接导致“无效操作”的主要内容,如果未能解决你的问题,请参考以下文章

带有内部联接和子查询的 Microsoft Access 更新语句

如何在两个表之间创建正确的联接?

具有相同计数值的两个表之间的内部联接

使用运算符一次(内部联接)使用第一个查询的参数执行两个 firebase 查询?

将 Access SQL 内部联接查询转换为 mySQL 查询的问题

外部联接中的内部联接导致性能不足,有啥不同的方法?