同じテーブルから2つの行を比較する方法 (SQL Server)

私は、異なるステータスを持つ特定の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' 
解説 (5)

OK、2年経ってようやく構文を修正する時が来ました。

SELECT  t1.value, t2.value
FROM    MyTable t1
JOIN    MyTable t2
ON      t1.id = t2.id
WHERE   t1.id = @id
        AND t1.status = @status1
        AND t2.status = @status2
解説 (4)

次のような代替構文を使うと、何が起こっているのかがわかりやすいという人もいます。

select t1.value,t2.value
from MyTable t1
    inner join MyTable t2 on
        t1.id = t2.id
where t1.id = @id
解説 (0)

SELECT COUNT(*)FROM(SELECT * FROM tbl WHERE id = 1 UNION SELECT * FROM tbl WHERE id = 2)a

2つの行がある場合、それらは異なります(1つでも同じ)。

解説 (0)
SELECT * FROM A AS b INNER JOIN A AS c ON b.a = c.a
WHERE b.a = 'some column value'
解説 (0)