OUTER APPLY 是 SQL 中一個強大的運算符,可讓您將一個表中的行與另一個表中的行關聯。雖然它看起來類似於 INNER JOIN,但在特定情況下它提供了獨特的功能。
以下是一些 OUTER APPLY 證明其價值的實際範例:
按群組查詢前 N 行:
範例:擷取每個預存程序的前兩個參數。
<code class="language-sql">SELECT pr.name, pa.name FROM sys.procedures pr OUTER APPLY ( SELECT TOP 2 * FROM sys.parameters pa WHERE pa.object_id = pr.object_id ORDER BY pr.name ) pa ORDER BY pr.name, pa.name;</code>
呼叫表值函數:
範例:為外層查詢中的每一行執行表值函數。
<code class="language-sql">SELECT * FROM sys.dm_exec_query_stats AS qs CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle);</code>
重複使用列別名:
範例:重複使用列別名執行多個計算。
<code class="language-sql">SELECT number, doubled_number, doubled_number_plus_one FROM master..spt_values CROSS APPLY (SELECT 2 * CAST(number AS BIGINT)) CA1(doubled_number) CROSS APPLY (SELECT doubled_number + 1) CA2(doubled_number_plus_one);</code>
將多組列反轉:
範例:從具有非規範化結構的表格反轉資料。
<code class="language-sql">CREATE TABLE T ( Id INT PRIMARY KEY, Foo1 INT, Bar1 INT, Foo2 INT, Bar2 INT, Foo3 INT, Bar3 INT ); SELECT Id, Foo, Bar, GrpName FROM T CROSS APPLY (VALUES('1', Foo1, Bar1), ('2', Foo2, Bar2), ('3', Foo3, Bar3)) V(GrpName, Foo, Bar);</code>
以上是何時以及如何在 SQL 中使用 OUTER APPLY:真實範例?的詳細內容。更多資訊請關注PHP中文網其他相關文章!