2013-07-25 72 views
0

我有一個包含多個表的數據庫,我正在使用以下查詢來返回匹配字符串(名稱)的記錄。從表中檢索列可能有多行數據的記錄

MHP表中有一個Name field(primary key), Num_Sites和更多,但這些是我唯一關心的。

MHP_Parcel_Info表中有許多字段,其中之一是Name(foreign key)。有一個parcel_id字段,在某些情況下,可能只有一個宗地的宗地,但名稱也可能有很多宗地。

因爲它現在是我的查詢將返回一個行的實例,其中有多個地塊的名稱。

我想要做的是:如果名稱有多個包裹,請將所有包裹放入列表中(這樣我可以在列表框中顯示)。

我的SQL技能是有限的,我不知道如何去做這樣的事情。

SELECT MHP_Parcel_Info.*, MHP.NUM_SITES FROM MHP_Parcel_Info INNER JOIN MHP ON " + 
       "(MHP_Parcel_Info.MHP_NAME = MHP.MHP_NAME) WHERE MHP_Parcel_Info.MHP_NAME='" + strValue + "'" 
+0

您的查詢似乎沒問題!你試過了嗎? –

+0

是的,它可以工作,但如果有多個記錄,它將檢索一個。在8條記錄中,它將檢索第6條或第4條。如果多於一個存在,我將如何檢索全部? – KFP

回答

0

這不是您可以直接在SQL中執行的操作。在SQL查詢中無法選擇父/子結構中的數據 - 您必須將其作爲後處理步驟來執行。

因爲這被標記爲C#和Winforms我假設這是來自.Net應用程序。你需要爲你擁有了它上面執行查詢,然後在C#中,你可以使用LINQ GroupBy擴展方法對結果進行分組的結果入使用名稱作爲關鍵IGrouping對象的列表,並擁有所有的包裹信息作爲列表中的項目。

更妙的是,如果你使用(或可以使用)的LINQ to SQL或實體框架,你可以只寫一個LINQ查詢從數據庫中提取數據,並做一次分組全部。

+0

感謝您的建議。以前沒有使用過LINQ,但我想這就是讓我使用它的原因。 – KFP

+0

從我一直在閱讀網上嘗試使用LINQ與MS的訪問將是一個大傷腦筋。第三方LINQ to ODBC提供程序或將Access轉換爲SQL Server。啊。 – KFP

+1

您仍然可以在不使用LINQ to SQL的情況下使用LINQ。 LINQ還包含查詢IEnumerable對象的功能。您可以像現在這樣運行SQL查詢,並將響應放在List/IEnumerable中。然後在該列表上調用.GroupBy(確保使用System.Linq添加)。 –