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)
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'
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
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
SELECT COUNT(*) FROM (SELECT * FROM tbl WHERE id=1 UNION SELECT * FROM tbl WHERE id=2) a
SELECT * FROM A AS b INNER JOIN A AS c ON b.a = c.a
WHERE b.a = 'some column value'