outer apply是SQL Server 2005後才提供的語法,可以用來取一個Subquery的最大值、最小值等單筆記錄,這種需求以前一般是用自訂函數來完成的。範例如下:
兩個資料表,主要資料表是作者 Authors,明細資料表是作品 Books,一個作者會有一到多個作品。下列是欄位定義:
create table Authors ( AUTHOR varchar(50) not null primary key ); create table Books ( AUTHOR varchar(50) not null, TITLE varchar(200) not null, PUBLISH_DATE smalldatetime, primary key (AUTHOR, TITLE) );
範例用金庸和古龍的幾本作品為例:
insert into AUTHORS values ('金庸'); insert into AUTHORS values ('古龍'); insert into BOOKS (AUTHOR, TITLE, PUBLISH_DATE) values ('金庸', '書劍恩仇錄', '1955-02-08'); insert into BOOKS (AUTHOR, TITLE, PUBLISH_DATE) values ('金庸', '碧血劍', '1956-01-01'); insert into BOOKS (AUTHOR, TITLE, PUBLISH_DATE) values ('金庸', '射鵰英雄傳', '1957-01-01'); insert into BOOKS (AUTHOR, TITLE, PUBLISH_DATE) values ('金庸', '雪山飛狐', '1959-02-09'); insert into BOOKS (AUTHOR, TITLE, PUBLISH_DATE) values ('金庸', '神鵰俠侶', '1959-05-20');
用left outer join會列出每名作者的所有作品記錄。
但我們的需求是找出每位作者最後刊載的作品,只要用outer apply就能輕鬆的找出。
##
您可能也會有興趣的類似文章
- [Database] 請求Aqua Data Studio提供的新需求 (1則留言, 2005/03/18)
- [IntelliJ IDEA 2017.2] Database tool功能簡介 (0則留言, 2017/07/29)
- [Database] 建立SQL Server的檔案群組 (1則留言, 2005/03/23)
- 用Aqua Data Studio存取Trac.db以加速權限設定 (0則留言, 2007/07/14)
- 安裝SQL Server時發生0x851A001A的解決步驟 (0則留言, 2015/12/29)
- SQL Server 2008 R2 Express簡易安裝紀錄 (0則留言, 2011/09/06)
- 使用組態檔(ConfigurationFile)一鍵安裝SQL Server 2012 (0則留言, 2014/04/30)
- [Database] 識別欄位如何重新給值? (0則留言, 2005/02/19)
- phpMyAdmin的替代品:SQL Buddy (6則留言, 2008/12/06)
- SQL Server 2012還原資料庫時的資料夾權限問題 (1則留言, 2012/06/07)
- 安裝SQL Server 2012 Express注意事項 (0則留言, 2013/06/23)
- Apple無線鍵盤常用按鍵速查表(for iPad) (12則留言, 2011/03/12)
- Ubuntu的剪貼簿工具Parcellite,功能類似ditto (0則留言, 2013/11/04)
- Windows使用Redmine與轉檔紀要 (0則留言, 2014/12/14)
- [Java] jTDS: SQL Server的JDBC驅動程式 (0則留言, 2005/03/03)