我需要创建一个后台作业来处理一个表,查找与具有不同状态的特定id匹配的行.它将行数据存储在一个字符串中,以将数据与具有匹配id的行进行比较.
我知道获取行数据的语法,但我从未尝试过比较同一个表中的2行?怎么做?我是否需要使用变量来存储每个数据?或者其他一些方式?
(使用SQL Server 2008)
您可以根据需要多次将表连接到自身,它称为自联接.
为表的每个实例分配一个别名(如下例所示),以区分彼此.
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