SQL Server 與 Oracle 最大差異之一:所有衍生表 (子查詢作為 FROM 來源) 必須指定別名,否則報錯「無效的物件名稱」或「語法錯誤」。
-- 錯誤
SELECT * FROM (SELECT com_id FROM company);
-- 正確:外層必須加別名
SELECT * FROM (SELECT com_id FROM company) AS a;
-- 內層可加可不加別名
-- 錯誤:僅給外層別名
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;
COUNT(*), col1+col2) 若需被外層引用,必須取別名Oracle 允許無別名衍生表 (雖不推薦),SQL Server 強制要求,遷移專案需特別注意。