2017-02-22 4 views
0

を任意の要素に一致する最初のレコードを検索:私はこのような静的な基本要素のテーブル変数を持って</p> <p>(SQL Serverの2014)私はT-SQLでこれを達成するための効率的な方法を探しています別のテーブルに

╔════╦═════════════╗ 
║ 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"を返します。

私は現在、2番目のテーブル要素で早送りカーソルを使用し、一致するものを探すために最初のテーブルを照会すると動作しますが、T-SQLの専門家ではありませんので、より効率的な方法があるかどうかを知ることができます。

+0

出力は1つのレコード、つまりブラジルですか?あなたはテーブルを手に入れることを期待していますか? –

+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 
      ) 

内部結合のみハッシュタグは、両方のテーブルに存在するレコードを返します。次に、ダイナミックテーブルから最小IDを選択し、対応するハッシュタグを出力として取得します。

実際には、これはさらに次のように参加する単一使用するように単純化することができますが注文したとして

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

ここではIMOを使用する方法は「TOP」を使用しています。 –

+0

@ shree.pat18 2番目のバージョンを使用しました。ありがとうございました! –

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 
関連する問題