2010-07-12 60 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或臨時表。