Как сравнить 2 строки из одной таблицы (SQL Server)

Мне нужно создать фоновое задание, которое обрабатывает таблицу, ищущую соответствие строк по определенному идентификатору с разными статусами. Он будет хранить данные строки в строке для сравнения данных с строкой с соответствующим идентификатором.

Я знаю синтаксис, чтобы получить данные о строках, но я никогда не пробовал сравнивать 2 строки из той же таблицы раньше? Как это делается? Нужно ли мне использовать переменные для хранения данных от каждого? Или каким-то другим способом?

(с использованием SQL Server 2008)

Ответы

Ответ 1

Вы можете присоединить таблицу к себе столько раз, сколько потребуется, она называется self join.

Каждому экземпляру таблицы (как в примере ниже) присваивается псевдоним, чтобы отличать один от другого.

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' 

Ответ 2

ОК, через 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

Ответ 3

Некоторым людям легче найти следующий альтернативный синтаксис, чтобы увидеть, что происходит:

select t1.value,t2.value
from MyTable t1
    inner join MyTable t2 on
        t1.id = t2.id
where t1.id = @id

Ответ 4

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

Если у вас есть две строки, они разные, если один - тот же.

Ответ 5

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