"a"表的第2列未指定列名错误

3

我有一个MySQL查询,运行良好,但相同的查询在SQL Server中显示错误。

SQL Server查询:

SELECT 
    COUNT(*) cnt 
FROM 
    (SELECT DISTINCT 
         tc_id, MAX(exn_time), STATUS 
     FROM 
         release_details a, tc_details b  
     WHERE 
         a.project = b.project 
         AND a.tc_id = b.tc_name 
         AND logicaldel = 0 
         AND a.project = 'test' 
     GROUP BY 
         tc_id, STATUS) a 
WHERE 
    a.status = 'PASS';

错误:

在'a'的第2列未指定列名。

我该如何修改上述查询语句?


3
MAX(exn_time) 给我一个列名 - t-clausen.dk
2
摒弃的不良习惯:使用旧式的JOIN语法-那种旧式的、用逗号分隔的表格列表不应该再使用了,建议使用1992年引入的符合ANSI标准的JOIN语法。 - marc_s
2
另外,如果您使用表别名,请尝试使用一个更有意义的别名,而不仅仅是ab……对于release_detailstc_details,使用rdtc将比使用ab更直观 - marc_s
3个回答

6

在内部查询中使用别名名称。您正在获取MAX(exn_time),但未指定该列的名称,因此会抛出错误。您可以使用Joins将表连接起来,使其更易读。

SELECT COUNT(*) cnt 
FROM (
     SELECT DISTINCT 
         tc_id,
         MAX(exn_time) AS Maxtime ,
         STATUS 
      FROM 
         release_details a JOIN tc_details b  
           ON a.project= b.project 
             AND a.tc_id = b.tc_name 
      WHERE 
           logicaldel = 0  
           AND a.project ='test' 
      GROUP BY 
         tc_id,
         STATUS 
      ) a 
 WHERE a.status='PASS';

1

你忘了在子查询中加入别名

同时,如Marc_s所述,你需要使用正确的内联连接,将连接条件放在ON子句中,并将筛选器移到where子句中。

SELECT Count(*) cnt
FROM   (SELECT DISTINCT tc_id,
                        Max(exn_time) Max_exn_time,
                        STATUS
        FROM   release_details a
               INNER JOIN tc_details b
                       ON a.project = b.project
                          AND a.tc_id = b.tc_name
        WHERE  a.project = 'test'
               AND logicaldel = 0
        GROUP  BY tc_id,
                  STATUS) a
WHERE  a.status = 'PASS'; 

0

你的问题显然是结果集中第二列a没有别名。 你可以将整个查询重写为以下内容以获得相同的结果:

SELECT
    COUNT(DISTINCT tc_id) cnt
FROM 
    release_details a
JOIN
    tc_details b  
ON
    a.project = b.project 
    AND a.tc_id = b.tc_name 
WHERE
    logicaldel = 0 
    AND a.project = 'test' 
    AND STATUS = 'PASS'

由于 STATUS 只能取值 'PASS',MAX(exn_time) 对计数没有帮助,当使用类似于您的情况中的 group by 时,不应在 SELECT 开始处使用 DISTINCT,这是多余的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接