--用OUTER APPLY select b.* FROM a表 a OUTER APPLY (select TOP(1) * from b表 WHERE [Name] = a.[AName] ORDER BY BNo desc) b
總結: 1. 理解 CROSS APPLY 與 OUTER APPLY(個人理解) 1) CROSS APPLY 的意思是“交叉應用”,在查詢時首先查詢左表,然后右表的每一條記錄跟左表的當前記錄進行匹配。匹配成功則將左表與右表的記錄合並為一條記錄輸出;匹配失敗則拋棄左表與右表的記錄。(與 INNER JOIN 類似) 2) OUTER APPLY 的意思是“外部應用”,與 CROSS APPLY 的原理一致,只是在匹配失敗時,左表與右表也將合並為一條記錄輸出,不過右表的輸出字段為 null。(與 LEFT OUTER JOIN 類似) 2. CROSS APPLY 與 INNER JOIN 的區別 1) CROSS APPLY 可以根據當前左表的當前記錄去查詢右表,但是 INNER JOIN 不可以,INNER JOIN 是根據左表的當前記錄匹配右表整個結果集。 2) 兩者都是匹配成功才輸出。 3. OUTER APPLY 與 LEFT OUTER JOIN 的區別 1) 它們和(CROSS APPLY 與 INNER JOIN)類似。 2) 只是兩者都是匹配失敗也會輸出。 4. 使用場景: 1) 一個商品有多張圖片,但是只想取最近的一張圖片跟商品匹配。 5. 總結一句話:右表可以是有條件的跟左表的記錄匹配,而條件的值可以來至於左表。
轉自鏈接:https://www.cnblogs.com/abeam/p/7137993.html