Как сравнить 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'