私は、異なるステータスを持つ特定のIDに一致する行を探すためにテーブルを処理するバックグラウンドジョブを作成する必要があります。それは、一致するidを持つ行とデータを比較するために、文字列に行のデータを格納します。
行データを取得する構文は知っていますが、同じテーブルから2つの行を比較したことがありません?それはどのように行われるのでしょうか?それぞれのデータを格納するために変数を使用する必要があるのでしょうか?それとも他の方法ですか?
(SQLサーバー2008を使用)
テーブルを自分自身に結合することは何度でも可能で、これを自己結合と呼びます。
テーブルの各インスタンスには、(以下の例のように)エイリアスが割り当てられ、1つを別のものと区別します。
SELECT a.SelfJoinTableID
FROM dbo.SelfJoinTable a
INNER JOIN dbo.SelfJoinTable b
ON a.SelfJoinTableID = b.SelfJoinTableID
INNER JOIN dbo.SelfJoinTable c
ON a.SelfJoinTableID = c.SelfJoinTableID
WHERE a.Status = 'Status to filter a'
AND b.Status = 'Status to filter b'
AND c.Status = 'Status to filter c'
次のような代替構文を使うと、何が起こっているのかがわかりやすいという人もいます。
select t1.value,t2.value
from MyTable t1
inner join MyTable t2 on
t1.id = t2.id
where t1.id = @id