【问题标题】:Joining three tables using UNION query使用 UNION 查询连接三个表
【发布时间】:2012-11-18 23:33:16
【问题描述】:

我要做的是从三个不同的表中提取独特的数据集,并使用 UNION 查询将它们一起显示。它们都有一个共同的领域,因此它们应该通过该领域进行链接。当我尝试运行显示“无法执行查询。使用多值字段的操作或语法无效”的查询时出现错误。我知道哪个字段导致了问题,它是“业务线”字段。我将如何解决这个问题以便查询能够处理它?有可能吗?

这是我正在使用的 SQL 语句:

SELECT [Financial Bureau Reports].[Date Year], [Financial Bureau Reports].[Section Chief].[Financial Bureau Reports].[Outcome], [Financial Bureau Reports].[Type of Review]
FROM [Financial Bureau Reports]
WHERE (([Financial Bureau Reports].[CoCode (NAIC)]=[Forms]![Home Screen]![txtCoCode]))

UNION ALL

SELECT [Market Analysis Review].[Data Year], [Market Analysis Review].[Review Level], [Market Analysis Review].[Line of Business].[value], [Market Analysis Review].[Recommendation], [Market Analysis Review].[Analyst], [Market Analysis Review].[Action]
FROM [Market Analysis Review]
WHERE(([Market Analysis Review].[CoCode (NAIC)]=[Financial Bureau Reports].[CoCode(NAIC)]))

UNION ALL 

SELECT [MarketConductExams].[State], [MarketConductExams].[Report Date]
FROM [MarketConductExams]
WHERE [MarketConductExams].[CoCode (NAIC)]=[Market Analysis Review].[CoCode (NAIC)];

抱歉,缺少格式,显然 SQL 不能很好地传输。

另外,我在 Microsoft Access 2010 中使用 SQL。

如果问题太模糊或需要澄清,请告诉我。谢谢!

【问题讨论】:

  • 至少,您可以突出显示代码块和 ctl-k 或单击 { } 按钮以格式化为代码块。

标签: sql ms-access join union


【解决方案1】:

您不能将选择中列数不同的查询合并在一起。这些似乎甚至不是应该合并在一起的相关查询。我认为您需要向您的应用程序发送三个单独的查询。

【讨论】:

    【解决方案2】:

    我不知道您为什么特别收到该消息,但 UNION 语句要求每个 SELECT 语句具有相同数量的列并且它们具有相同的数据类型。您发布的 SQL 语句并非如此。

    【讨论】:

      【解决方案3】:

      我通常在联合周围有一个外部 SELECT,但其他的都是正确的,你需要有相同数量的字段和这些字段的相同名称。

      使用 AS 同步字段名称。 如果您有一些不在其他查询中的字段,那么您可以制造它们:null as SomeOutputField 或 '' as SomeOutputField。

      【讨论】:

        【解决方案4】:

        我认为您需要将您的表相互连接,而不是将它们联合在一起 - 像这样:

        SELECT [Financial Bureau Reports].[Date Year], 
               [Financial Bureau Reports].[Section Chief].[Financial Bureau Reports].[Outcome], 
               [Financial Bureau Reports].[Type of Review],
               [Market Analysis Review].[Data Year], 
               [Market Analysis Review].[Review Level], 
               [Market Analysis Review].[Line of Business].[value], 
               [Market Analysis Review].[Recommendation], 
               [Market Analysis Review].[Analyst], 
               [Market Analysis Review].[Action],
               [MarketConductExams].[State], 
               [MarketConductExams].[Report Date]
        FROM [Financial Bureau Reports]
        (JOIN [Market Analysis Review]
           ON [Market Analysis Review].[CoCode (NAIC)]=[Financial Bureau Reports].[CoCode(NAIC)]
         (JOIN [MarketConductExams]
            ON [MarketConductExams].[CoCode (NAIC)]=[Market Analysis Review].[CoCode (NAIC)]))
        WHERE [Financial Bureau Reports].[CoCode (NAIC)]=[Forms]![Home Screen]![txtCoCode];
        

        【讨论】:

        • 有道理。我试过了,我收到一个错误,告诉我 FROM 字段中存在语法问题...有什么想法吗?
        • 你能包含实际的错误信息吗? FROM 是子句的开头,而不是字段名;如果错误消息指的是“FROM 字段”,请检查您的代码在[MarketConductExams].[Report Date] 之后是否有逗号。您也可以尝试从第一个 ONWHERE 条件周围删除 ((...)),或在第二个 ON 条件周围添加它们。
        • 最初,我收到一条消息,上面写着“FROM 子句中的语法错误”。现在,在[MarketConductExams].[Report Date] 之后添加逗号后,我收到一条错误消息,提示“SELECT 语句包含拼写错误或缺失的保留字或参数名称,或者标点符号不正确。” (我也已经完成并调整了包围)。
        • @GregSpev:您误解了我之前的评论 - [MarketConductExams]。[Report Date] 后面不应有逗号。我试图在没有实际错误消息的情况下提供可能的解决方案(这总是一个坏主意)。我在其他地方读到 Access 中的连接表应该用括号括起来,并相应地修改了我的查询 - 您可以尝试更新后的查询吗?
        • 啊,明白了。我的错。好的,我尝试了您建议的查询,但仍然收到“FROM 子句中的语法错误”。它发生在括住 JOIN 子句的括号中,仍然是一个错误。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-05-02
        • 2015-09-23
        • 2013-07-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多