2017-02-22 23 views
0

我正在尋找在T-SQL實現這一點(的SQL Server 2014)查找另一個表匹配任何元素

的有效方式,我有這樣一個靜態的基本元素表變量的第一個記錄:

╔════╦═════════════╗ 
║ Id ║ Hashtag ║ 
╠════╬═════════════╣ 
║ 1 ║ Thailand ║ 
║ 2 ║ Philippines ║ 
║ 3 ║ Indonesia ║ 
║ 4 ║ Brazil  ║ 
║ 5 ║ Mexico  ║ 
║ 6 ║ Nicaragua ║ 
║ 7 ║ Colombia ║ 
║ 8 ║ Malaysia ║ 
╚════╩═════════════╝ 

而且我也有另外一個表變量(動態填入查詢)是這樣的:

╔════╦══════════╗ 
║ Id ║ Hashtag ║ 
╠════╬══════════╣ 
║ 1 ║ Live  ║ 
║ 2 ║ Brazil ║ 
║ 3 ║ Like  ║ 
║ 4 ║ Thailand ║ 
║ 5 ║ Malaysia ║ 
║ 6 ║ Love  ║ 
╚════╩══════════╝ 

我需要做的是遍歷第二個表,併爲每個記錄看如果它存在於基表中並且它發現第一次匹配時停止迭代並返回找到的值,那麼在我的示例中,查詢應該返回「Brazil」,因爲它是第一個記錄,其降序也包含在基表中。

我目前正在使用快速轉發光標與第二個表格元素並查詢第一張表以查找匹配,它的工作原理,但我不是T-SQL的專家,所以我要求您的幫助瞭解是否有更有效的方法。

+0

那麼你的輸出是單一的記錄,即巴西?或者你期望得到一張桌子? –

+0

@ shree.pat18只是字符串值「Brazil」(VARCHAR變量) –

回答

2

假設你想找到一個記錄這是第一場比賽,你可以做這樣的事情:

select hashtag 
from dynamictable 
where id = (
      select min(d.id) 
      from dynamictable d 
      inner join referencetable r on r.hashtag = v.hashtag 
      ) 

內部聯接僅返回其中包括hashtag兩個表中存在的記錄。然後,我們只需從動態表中選擇最小ID並獲取相應的哈希標籤作爲輸出。

事實上,這可以進一步簡化使用單個連接如下:

select top 1 d.hashtag 
from dynamictable d 
inner join referencetable r on r.hashtag = d.hashtag 
order by v.id 
+1

使用'TOP'是在這裏去IMO的路。 –

+0

@ shree.pat18我用了第二個版本,非常感謝! –

1

作爲替代斯里的回答中,我們可以用行號這裏確定的第一個匹配記錄所訂購的Id:

WITH cte AS(
    SELECT t2.Hashtag, 
      ROW_NUMBER() OVER (PARTITION BY Id ORDER BY Id) rn 
    FROM table2 t2 
    INNER JOIN table1 t1 
     ON t2.Hashtag = t1.Hashtag 
) 
SELECT t.Hashtag 
FROM cte 
WHERE t.rn = 1 
相關問題