复杂的“版本式”查询

时间:2013-11-22 13:15:30

标签: sql sql-server-2008

对不起我的头衔,似乎有点“关闭”,但找不到更好的解释我的问题。

所以,我有一个如下表:

CREATE TABLE DocumentTable 
(
 id int identity primary key, 
 ParentId int, 
 CategoryId int,
 Version int
);

这用于存储文档并跟踪其版本。

是否可以使用返回最新版本文档的SQL?或者我应该以编程方式执行此操作(这会降低性能,因为我会选择所有文档,然后进行操作)

这里还是我的表格的SQLFiddle,其中包含示例数据。

例如我在我的小提琴中有这些数据:

ID  PARENTID    CATEGORYID  VERSION 
1   (null)          1           1 
2   1               1           2 
3   2               1           3 
4   (null)          1           1 
5   (null)          1           1 
6   (null)          1           1 
7   4               1           2

Id区分了文件。 parentId显示女巫文件是其父母。因此,在我的示例中,我有1个文档,其中包含3个版本(1,2,3),2个文档没有父版本(5,6),另一个文档包含2个版本(4,7)

因此,对于这些数据,我想选择id = 3,5,6,7

的文档

1 个答案:

答案 0 :(得分:3)

您可以使用NOT EXISTS

SELECT *
FROM   DocumentTable DT1
WHERE  NOT EXISTS(SELECT *
                  FROM   DocumentTable DT2
                  WHERE  DT2.ParentId = DT1.id) 

SQL Fiddle