2011-08-23 70 views
0

我在SQL Server 2008數據庫中有一個數據庫。我的數據庫模型使用四個表格形成菱形圖案。這四個表的定義如下:查詢SQL Server中的子表

Table1 
- ID 
- Name 
- AddedBy 

Table2 
- ID 
- Table1ID 
- Name 
- Type 

Table3 
- ID 
- Table1ID 
- Name 

Table4 
- ID 
- Table2ID 
- Table3ID 
- Age 

我目前得到的所有記錄表1爲特定用戶使用AddedBy場。這個查詢看起來是這樣的:

SELECT 
    * 
FROM 
    [Table1] t1 
WHERE 
    t1.[AddedBy][email protected] 

現在,我需要從以某種方式與表1相關的第一個表4記錄的時代價值。我該怎麼做呢?我一直對查詢感到困惑。

感謝您提供任何幫助!

+2

你怎麼定義「第一」? –

+0

Table1和Table4有什麼關係? 1:1,1:很多? – nageeb

+0

投票結束,因爲太局部。這是非常基本的SQL,未來任何人都不可能在關於'JOIN's – JNK

回答

2

這是主鍵如何複合讓您更準確地表達你希望你的數據庫做一個經典的例證。

鑑於您擁有的型號,看起來Table2Table3是由Table1直接定義的;也就是說,在沒有父母Table1記錄的情況下擁有Table2記錄是沒有意義的。同樣,它看起來像Table4只有當Table2Table3存在。如果這是真的,那麼Table2Table3Table4應該有複合主鍵沿着這些線路:

Table2 
------------- 
Table1ID  -- consider renaming this in Table1 so that the same name is used 
       throughout 
RecordNumber -- unique within a given Table1ID; this is only needed if one of 
       your other two columns cannot serve as a unique value within 
       Table1ID, which I'm guessing one of them can 

然後,你做Table3類似的東西。然後,Table4,你必須:

Table4 
------------- 
Table1ID 
Table2RecordNumber 
Table3RecordNumber 

作爲主鍵,然後設置了兩個外鍵,一到Table2上(Table1ID, Table2RecordNumber)和一個Table3上(Table1ID, Table3RecordNumber)。這使您可以確保您的Table4記錄總是鏈接到Table2Table3記錄與同Table1ID,它簡化了原始查詢的加入,使其不必經過Table2Table3找到Table4有效記錄。

+0

的搜索中遇到這個問題,這是對重新設計的想法。如果不這樣做,這將很難查詢。是的,是的,是的,以擺脫ID作爲ID字段的名稱。這是一個SQL反模式,我每次看到它都會畏縮。 – HLGEM