当前位置:  开发笔记 > 前端 > 正文

我如何比较同一个表中的2行(SQL Server)

如何解决《我如何比较同一个表中的2行(SQLServer)》经验,为你挑选了3个好方法。

我需要创建一个后台作业来处理一个表,查找与具有不同状态的特定id匹配的行.它将行数据存储在一个字符串中,以将数据与具有匹配id的行进行比较.

我知道获取行数据的语法,但我从未尝试过比较同一个表中的2行?怎么做?我是否需要使用变量来存储每个数据?或者其他一些方式?

(使用SQL Server 2008)



1> Andy Jones..:

您可以根据需要多次将表连接到自身,它称为自联接.

为表的每个实例分配一个别名(如下例所示),以区分彼此.

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' 


不是你需要的那么多次..在查询中引用256个表有一个限制:]
提及你必须别名,这对你有好处

2> Quassnoi..:

好的,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


你不应该使用那种语法.请改用特定的连接.不推荐使用该语法的左连接和右连接形式.我不会惊讶地发现在下一个版本中不推荐使用此表单.
@Pauk ms-help://MS.SQLCC.v10/MS.SQLSVR.v10.en/s10sq_GetStart/html/c10eeaa5-3d3c-49b4-a4bd-5dc4fb190142.htm即使它们不是,也不赞成左右版本不应该使用它们,因为它们会产生不一致且有时不准确的结果.它们有时可以被解释为交叉连接而不是左连接或右连接.

3> John Sansom..:

有些人发现以下替代语法更容易看到发生了什么:

select t1.value,t2.value
from MyTable t1
    inner join MyTable t2 on
        t1.id = t2.id
where t1.id = @id

推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有