我需要创建一个后台作业,该作业处理一个表,查找与具有不同状态的特定id匹配的行。它会将行数据存储在字符串中,以便将数据与具有匹配id的行进行比较。
我知道获取行数据的语法,但我以前从未尝试过比较同一个表中的两行。它是如何做到的?我需要使用变量来存储每个变量的数据吗?或者其他方式?
(使用SQL Server 2008)
发布于 2009-02-04 03:51:05
您可以根据需要多次将表连接到表本身,这称为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'
发布于 2009-02-04 03:16:56
好了,两年后,终于到了改正语法的时候了:
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
发布于 2009-02-04 03:27:39
有些人发现下面的替代语法更容易看出是怎么回事:
select t1.value,t2.value
from MyTable t1
inner join MyTable t2 on
t1.id = t2.id
where t1.id = @id
https://stackoverflow.com/questions/510916
复制相似问题