【问题标题】:Union query "unable to execute query, invalid operation or syntax using multi-value field"联合查询“无法使用多值字段执行查询、无效操作或语法”
【发布时间】:2016-06-03 01:17:33
【问题描述】:

我正在尝试运行下面的查询,我得到:

使用多值字段无法执行查询、无效操作或语法

这里的所有列都是匹配的,并且所有值都是相同的数据类型。我似乎无法在网上找到我理解的信息。有人可以帮忙吗?

SELECT
    fq.fk_spEngineerID,
    fq.spQuoteID,
    fq.spOrderID,
    fq.BU,
    fq.fk_spProductTypeID,
    fq.fk_spCompanyID,
    fq.fk_spOfficeID
FROM (
    SELECT
        fk_spEngineerID,
        spQuoteID,
        NULL AS spOrderID,
        BU,
        fk_spProductTypeID,
        fk_spCompanyID,
        fk_spOfficeID
    FROM FactQuote
    UNION ALL
    SELECT
        fk_spEngineerID,
        NULL AS spQuoteID,
        spOrderID,
        BU,
        fk_spProductTypeID,
        fk_spCompanyID,
        fk_spOfficeID
    FROM FactOrder
) AS fq
GROUP BY
    fq.fk_spEngineerID,
    fq.spQuoteID,
    fq.spOrderID,
    fq.BU,
    fq.fk_spProductTypeID,
    fq.fk_spCompanyID,
    fq.fk_spOfficeID;

此查询运行差异在于数据源是查询而不是表

select 
    fq.fk_spEngineerID, 
    fq.spQuoteID,
    fq.spOrderID, 
    fq.BU,
    fq.spProductTypeID, 
    fq.fk_spCompanyID, 
    fq.fk_spOfficeID
From (
    Select 
        fk_spEngineerID, 
        spQuoteID,
        "" as spOrderID, 
        BU, 
        spProductTypeID, 
        fk_spCompanyID, 
        fk_spOfficeID, 
    From QuotestatsSubQuery 
    Union All 
        Select 
        fk_spEngineerID,
        "" as spQuoteID,spOrderID,
         BU, 
        spProductTypeID, 
        fk_spCompanyID, 
        fk_spOfficeID 
    From OrderstatsSubQuery
) as fq 
Group By  
    fq.fk_spEngineerID,
    fq.spQuoteID,
    fq.spOrderID,  
    fq.BU, 
    fq.spProductTypeID, 
    fq.fk_spCompanyID, 
    fq.fk_spOfficeID;

【问题讨论】:

  • OP - 你还在吗?您的底部查询中有语法错误。这两种说法有什么区别?第二个是第一个的来源还是反之亦然?通常这个错误出现在复杂的查询中,引擎无法找到具体的错误。

标签: sql ms-access


【解决方案1】:

评论太长了。

MS Access 不支持子查询中的UNIONUNION ALL。在我看来,这是一个严重的限制。

除了迁移到另一个数据库之外,您所能做的就是定义一个视图。视图可以包含表的UNION ALL,然后您可以在聚合查询中使用UNION

【讨论】:

  • 在我从表中获取数据的情况下是否不支持。在这种情况下,factorder 和 factquote 都是表。我有另一个格式相同的查询,它从 2 个查询中获取值并且有效,那么问题是什么?
  • @M_kul 。 . .支持UNION ALL,只是不在FROM 子句中。
  • 太长无法评论,但我在原始问题中添加了查询,唯一的区别是第一个从表中获取信息,而第二个首先查询表,然后查询做同样的事情.奇怪的是,它似乎将 id 解释为字符串。你能解释一下我想了解以备将来使用的区别吗
  • 这不是真的,MS Access 确实允许 FROM/JOIN 子句子查询中的 UNIONUNION ALL
  • @Parfait 。 . .这可能是一个古老的限制。我不会努力使我的 MS Access 语法保持最新​​,因此感谢您的澄清。不幸的是,文档没有提供任何一种方式的示例。例如,select 不包括联合 (msdn.microsoft.com/en-us/library/office/ff821148.aspx),子查询定义为 select (msdn.microsoft.com/en-us/library/office/ff192664.aspx)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-04
  • 1970-01-01
  • 1970-01-01
  • 2020-04-26
  • 2016-01-27
  • 1970-01-01
相关资源
最近更新 更多