【问题标题】:Mismatch of columns in UNION ALL statementUNION ALL 语句中的列不匹配
【发布时间】:2015-04-25 07:06:26
【问题描述】:

我有这个问题,

            (SELECT
            [NAME],
            [NAME] AS RESULT, 
            ' - ' AS VALUE, 
            0 AS ORDERING 
            FROM 
            [PARTY_MSTR] 
            UNION ALL 
            (SELECT 
            [PARTY_MSTR].[NAME], 
            '  - ' || [T1].[T_NAME], 
            (SELECT [T2].[T_NAME],
            SUM(COALESCE([T2].[VALUE1], 0)) +  FROM [T2] 
            CROSS JOIN [T1] ON [T1].[T_NAME] = [T2].[T_NAME] 
            GROUP BY [T2].[T_NAME]), 
            1 
            FROM 
            [PARTY_MSTR] 
            CROSS JOIN [T1] 
            ) AS X;

当我运行这个查询时,我收到了这个错误SELECTs to the left and right of UNION ALL do not have the same number of result columns

现在我删除了 cmets,第二个错误出现了,only a single result allowed for a SELECT that is part of an expression。这个查询有什么问题。?我正在使用 SQLite 数据库。

【问题讨论】:

  • 两个 SELECT 语句返回的列必须相同,无论是计数还是名称。
  • 我用 C# 编写了这个查询。所以我不得不添加它们。忘记删除它们。我认为这没什么大不了的。

标签: sqlite union-all


【解决方案1】:

在联合的左边有四个字段,右边有五个。

联合右侧的子选择返回多行。这就是你得到第二个错误的原因。

...请编辑您的代码,以便那里只有 SQL。

【讨论】:

  • 使用 cmets,出现第一个错误。去掉cmets后,出现第二个错误。
  • 没错,这就是你得到两个答案的原因。删除评论并修复您的子选择。
  • 如果删除 GROUP BY 子选择将只返回一行。这应该让它运行。
【解决方案2】:

解决了。

        (SELECT
        [NAME],
        [NAME] AS RESULT, 
        ' - ' AS VALUE, 
        0 AS ORDERING 
        FROM 
        [PARTY_MSTR] 
        UNION ALL 
        SELECT 
        [PARTY_MSTR].[NAME], 
        '  - ' || [T1].[T_NAME], 
        (SELECT VALUE FROM ((SELECT [T2].[T_NAME],
        SUM(COALESCE([T2].[VALUE1], 0)) AS VALUE  FROM [T2] 
        CROSS JOIN [T1] ON [T1].[T_NAME] = [T2].[T_NAME] 
        GROUP BY [T2].[T_NAME]) AS Y)), 
        1 
        FROM 
        [PARTY_MSTR] 
        CROSS JOIN [T1] 
        ) AS X;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-28
    • 1970-01-01
    • 2019-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多