Como comparar 2 linhas da mesma tabela (servidor SQL)

Preciso de criar uma tarefa de fundo que processa uma tabela à procura de linhas que correspondam a um id em particular com diferentes estatutos. Ele irá armazenar os dados da linha em uma string para comparar os dados com uma linha com um id correspondente.

Eu sei a sintaxe para obter os dados da linha, mas eu nunca tentei Comparar 2 linhas da mesma tabela antes? Como se faz? Eu precisaria usar variáveis para armazenar os dados de cada um? Ou de outra forma?

(Usando o servidor SQL 2008)

Author: Martin Smith, 2009-02-04

5 answers

Você pode se juntar a uma mesa para si mesmo quantas vezes precisar, ela é chamada de uma auto-adesão .

É atribuído um nome alternativo a cada instância do quadro (como no exemplo abaixo) para se diferenciarem um do outro.

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' 
 31
Author: Andy Jones, 2015-04-06 16:08:53

OK, depois de 2 anos é finalmente hora de corrigir a sintaxe:

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
 9
Author: Quassnoi, 2010-11-10 13:56:15

Algumas pessoas acham a seguinte sintaxe alternativa mais fácil de ver o que está acontecendo:

select t1.value,t2.value
from MyTable t1
    inner join MyTable t2 on
        t1.id = t2.id
where t1.id = @id
 6
Author: John Sansom, 2012-07-30 16:36:01

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

Se tiveres duas filas, elas são diferentes, se é a mesma.
 2
Author: Валентин Нэллин, 2013-12-10 18:47:25
SELECT * FROM A AS b INNER JOIN A AS c ON b.a = c.a
WHERE b.a = 'some column value'
 1
Author: narender, 2011-12-05 13:15:18