FROM 子句中的子查詢,必須有別名,行為如臨時 View,僅在該查詢存續期間存在。無需建立物件、無權限問題、自動清理。
SELECT RTRIM(a.au_fname) + ' ' + LTRIM(a.au_lname) AS Name, d1.title_id
FROM authors a,
(SELECT title_id, au_id FROM titleauthor) AS d1 -- 派生表
WHERE a.au_id = d1.au_id
ORDER BY a.au_lname, a.au_fname;
需求:同一日期下,不同 id (1/2/3) 的價格橫向顯示
SELECT DISTINCT ww.dates,
(SELECT price FROM adt1 b WHERE id=1 AND ww.dates=b.dates) AS w1,
(SELECT price FROM adt1 c WHERE id=2 AND ww.dates=c.dates) AS w2,
(SELECT price FROM adt1 d WHERE id=3 AND ww.dates=d.dates) AS w3
FROM adt1 ww
ORDER BY ww.dates;
SELECT a.dates, a.price AS w1, b.price AS w2, c.price AS w3
FROM (SELECT * FROM adt1 WHERE id=1) AS a
JOIN (SELECT * FROM adt1 WHERE id=2) AS b ON a.dates = b.dates
JOIN (SELECT * FROM adt1 WHERE id=3) AS c ON b.dates = c.dates
ORDER BY a.dates;
id,資料量大幅縮減dates,利用索引極快LEFT JOIN 保留基準表若 id 值不固定,需動態 SQL 組裝 PIVOT 或多重 LEFT JOIN,派生表結構相同,僅在應用層組裝 SQL 字串。
派生表是 T-SQL 靈活度最高的結構之一:**零物件開銷、語意封裝、最佳化器可下推述詞**。善用它替代 View、簡化複雜邏輯、實現橫向合併,讓查詢既清晰又高效。