首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 子查詢別名錯誤解決:衍生表與彙總函數必須命名

     編輯:關於SqlServer

錯誤現象

SQL Server 與 Oracle 最大差異之一:所有衍生表 (子查詢作為 FROM 來源) 必須指定別名,否則報錯「無效的物件名稱」或「語法錯誤」。

兩類常見情境

1. 簡單衍生表 (無 GROUP BY/彙總)

-- 錯誤
SELECT * FROM (SELECT com_id FROM company);

-- 正確:外層必須加別名
SELECT * FROM (SELECT com_id FROM company) AS a;
-- 內層可加可不加別名

2. 含 GROUP BY / 彙總函數的衍生表

-- 錯誤:僅給外層別名
SELECT * FROM (SELECT com_id, COUNT(com_id) FROM company GROUP BY com_id) a;

-- 正確:外層別名 + 彙總欄位別名 + 來源表別名
SELECT * FROM (
    SELECT com_id, COUNT(com_id) AS c
    FROM company b
    GROUP BY com_id
) a;

核心規則

  1. 每個衍生表 (FROM/JOIN 後的子查詢) 必須有別名 (AS 可省略)
  2. SELECT 清單中 的運算式 (如 COUNT(*), col1+col2) 若需被外層引用,必須取別名
  3. 來源表在子查詢內 建議加別名,避免欄位名稱衝突

對比 Oracle

Oracle 允許無別名衍生表 (雖不推薦),SQL Server 強制要求,遷移專案需特別注意。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved