Как сравнить 2 строки из одной таблицы (SQL Server) - PullRequest
18 голосов
/ 04 февраля 2009

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

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

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

Ответы [ 5 ]

33 голосов
/ 04 февраля 2009

Вы можете присоединять таблицу к себе столько раз, сколько вам нужно, это называется 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' 
11 голосов
/ 04 февраля 2009

ОК, через 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
6 голосов
/ 04 февраля 2009

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

select t1.value,t2.value
from MyTable t1
    inner join MyTable t2 on
        t1.id = t2.id
where t1.id = @id
2 голосов
/ 10 декабря 2013

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

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

1 голос
/ 16 апреля 2010
SELECT * FROM A AS b INNER JOIN A AS c ON b.a = c.a
WHERE b.a = 'some column value'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...