2013-07-25 39 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添加)。 –