Come faccio a confrontare 2 righe dalla stessa tabella (SQL Server)

Devo creare un processo in background che elabori una tabella cercando le corrispondenze di righe su un particolare ID con stati diversi. Memorizzerà i dati della riga in una stringa per confrontare i dati con una riga con un ID corrispondente.

Conosco la syntax per ottenere i dati della riga, ma non ho mai provato a confrontare 2 righe della stessa tabella prima? Com’è fatto? Avrei bisogno di utilizzare le variabili per memorizzare i dati da ciascuno? O in qualche altro modo?

(Utilizzo di SQL Server 2008)

È ansible unirsi a un tavolo a se stesso tutte le volte che lo si desidera, viene chiamato self join .

Ad ogni istanza della tabella viene assegnato un alias (come nell’esempio seguente) per differenziarne uno da un altro.

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, dopo 2 anni è finalmente giunto il momento di correggere la syntax:

 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 

Alcune persone trovano più facile la seguente syntax alternativa per vedere cosa sta succedendo:

 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

Se hai due file, sono diverse, se una – la stessa cosa.

 SELECT * FROM A AS b INNER JOIN A AS c ON ba = ca WHERE ba = 'some column value'