[英]possible to join a table on only one row
我在要存儲用戶信息的存儲過程中創建一個臨時表。 我需要將該表連接到具有該特定用戶幾行的另一個表,但是我只想從“許多”表中返回一個結果。
像這樣的東西
SELECT u.firstname, u.lastname
FROM #users AS u
INNER JOIN OtherTable AS ot on u.userid = (top 1 ot.userid)
顯然,這行不通,但這是我要執行的操作的要點,原因有兩個,一個我只希望返回一行(日期字段降序),而第二個則用於優化目的。 查詢必須掃描當前的幾千行。
SELECT
u.firstname, u.lastname, t.*
FROM
#users AS u
CROSS APPLY
(SELECT TOP 1 *
FROM OtherTable AS ot
WHERE u.userid = ot.userid
ORDER BY something) t
使用ROW_NUMBER()函數按日期時間對行進行排序,然后按row_num = 1進行過濾
;WITH otNewest
AS
(
SELECT *
FROM othertable
WHERE ROW_NUM() OVER(partition by userid order by datetime DESC) = 1
)
SELECT u.firstname, u.lastname, o.*
FROM #users U
INNER JOIN otNewest O
ON U.userid = O.userid
因此,如果您要加入但不從OtherTable
返回任何列,那么您只對檢查是否存在感興趣?
SELECT u.firstname, u.lastname
FROM #users AS u
WHERE EXISTS(SELECT 1
FROM OtherTable ot
WHERE u.userid = ot.userid)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.