【问题标题】:SQL Error: Operand should contain 1 columnSQL 错误:操作数应包含 1 列
【发布时间】:2014-07-23 10:31:43
【问题描述】:

在我正在创建的系统上工作时,我尝试在我的项目中使用以下查询:

SELECT WEEKLY_TOTALS.DOMAIN, WEEKLY_TOTALS.CATEGORY, DAY
    FROM( 
        (SELECT DOMAIN,CATEGORY,DAY,CNT FROM BASE_DATA) AS DAY_CNTS
    INNER JOIN
        (SELECT DOMAIN,CATEGORY,SUM(CNT) AS TOT FROM BASE_DATA
    GROUP BY DOMAIN,CATEGORY) AS WEEKLY_TOTALS
    ON (DAY_CNTS.DOMAIN = WEEKLY_TOTALS.DOMAIN, 
        DAY_CNTS.CATEGORY = WEEKLY_TOTALS.CATEGORY)
    )

该查询虽然给了我一个错误:“#1241 - 操作数应包含 1 列

让我难过的是,我认为这个查询不会有问题。选择列,然后从另一个表中再选择两个,然后从那里继续。我就是想不通是什么问题。

是否有一个简单的解决方法,或另一种方式来编写我的查询?

【问题讨论】:

    标签: mysql sql sqlproj


    【解决方案1】:

    您的括号已关闭,您需要子查询的表别名,并且您需要AND 而不是on 子句中的逗号。

    其实你根本不需要第一个子查询:

    SELECT 
        WEEKLY_TOTALS.DOMAIN, WEEKLY_TOTALS.CATEGORY, DAY_CNTS.DAY
    FROM 
        BASE_DATA DAY_CNTS 
    INNER JOIN
        (SELECT 
             DOMAIN, CATEGORY, SUM(CNT) AS TOT
         FROM 
             BASE_DATA
         GROUP BY 
             DOMAIN, CATEGORY) WEEKLY_TOTALS ON DAY_CNTS.DOMAIN = WEEKLY_TOTALS.DOMAIN 
                                             AND DAY_CNTS.CATEGORY = WEEKLY_TOTALS.CATEGORY;
    

    此外,如果这是在 SQL Server 上,DAY 是保留字,因此应适当转义。

    【讨论】:

      【解决方案2】:

      您必须在查询中使用 [DAY] 而不是 Day:

      SELECT WEEKLY_TOTALS.DOMAIN, WEEKLY_TOTALS.CATEGORY, [DAY]
          FROM( 
              (SELECT DOMAIN,CATEGORY,[DAY],CNT FROM BASE_DATA) AS DAY_CNTS
          INNER JOIN
              (SELECT DOMAIN,CATEGORY,SUM(CNT) AS TOT FROM BASE_DATA
          GROUP BY DOMAIN,CATEGORY) AS WEEKLY_TOTALS
          ON (DAY_CNTS.DOMAIN = WEEKLY_TOTALS.DOMAIN, 
              DAY_CNTS.CATEGORY = WEEKLY_TOTALS.CATEGORY)
          )
      

      【讨论】:

        猜你喜欢
        • 2016-12-23
        • 1970-01-01
        • 2014-11-07
        • 2013-10-04
        • 1970-01-01
        • 2013-03-27
        • 2014-05-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多