2010-07-12 63 views
0

这是此question的延续。我整个周末都在解决这个问题。我完全被难住了。本质上,我继承了一个有趣的表结构。该表结构如下所示:获取2个表格之间的最新记录

grouptable将

* ID 
* Name 
* Description 

GroupItem

* ID 
* GroupID 
* Name 
* CreatedBy 
* CreationDate 

OpenGroupItem

* ID 
* GroupID 
* Name 
* CreatedBy 
* CreationDate 

我需要通过特定创建的三个最近GroupItem元素用户。这种转变带来了与GroupID相关的需求。我检索的三个GroupItem元素必须至少有一个具有相同GroupID的其他GroupItem元素。第二个问题是组中的其他项目可能在OpenGroupItem中。

换句话说,我试图检索组中至少有两个项目的三个最近GroupTables。这些项目可以在GroupItem或OpenGroupItem中。问题是至少有一个项目必须由特定用户创建。

我不知道如何在SQL中完成此操作。我正在使用SQL Server 2008,并且一直在不断缩短。

+1

如果你要开始一个新的问题,那么你可能想接受你的其他问题的答案之一,以便我们知道你要进入哪个方向(加上,这只是礼貌)。或者,改变你以前的问题,指出为什么这些解决方案不适合你。 – 2010-07-12 14:01:33

+0

完成。我并没有试图失礼。只专注于手头的问题:) – user336786 2010-07-12 17:16:12

回答

0

我的第一个建议是修复你的数据库结构。没有必要将它们放在两张具有相同结构的表格中。一张带有字段的表格表明它是否开放是一个更好的设计。为了防止事情中断,您将表命名为new,然后为GroupItem(与该表名称相同)创建一个视图,为OpenGroupITem创建一个视图,为您添加的每个基于onteh字段的记录选择所需的记录。如果您有这样的事情,您还需要更改将记录从公开状态转移到未公开状态的流程。

一旦完成,查询数据很简单。

如果你不能这样做,最好的解决办法是联合所有的两个表在一起,然后查询。如果您将不得不频繁执行此类查询,请将UNOIN ALL设置为一个视图。如果这种情况很少发生,请将其作为派生表或CTE或临时表。