簡體   English   中英

可能只在一張表上加入一張表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM