Мне нужно создать фоновое задание, которое будет обрабатывать таблицу в поисках строк, совпадающих по определенному идентификатору с различными статусами. Он будет хранить данные строки в строке, чтобы сравнить их со строкой с совпадающим идентификатором.
Я знаю синтаксис для получения данных строки, но я никогда не пробовал сравнивать 2 строки из одной таблицы? Как это делается? Нужно ли использовать переменные для хранения данных из каждой строки? Или каким-то другим способом?
(Используется SQL Server 2008)
Вы можете присоединять таблицу к самой себе столько раз, сколько вам требуется, это называется 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 года наконец-то пришло время исправить синтаксис:
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
Некоторым проще понять, что происходит, используя следующий альтернативный синтаксис:
select t1.value,t2.value
from MyTable t1
inner join MyTable t2 on
t1.id = t2.id
where t1.id = @id