2013-07-25 2 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 또는 Entity Framework를 사용하고 있거나 사용할 수있는 경우 데이터베이스에서 데이터를 가져와 한 번에 모두 그룹화하는 linq 쿼리를 작성할 수 있습니다.

+0

조언 주셔서 감사합니다. 이전에 LINQ를 사용하지 않았지만 이것을 사용하게하려면 무엇이 필요할까요? – KFP

+0

MS Access에서 LINQ를 사용하려고 온라인에서 읽고 있던 내용이 큰 골치 거리가 될 것입니다. 타사 LINQ를 ODBC 공급자에게 제공하거나 SQL Server에 대한 액세스를 변환합니다. 응. – KFP

+1

LINQ to SQL을 사용하지 않고도 LINQ를 사용할 수 있습니다. LINQ에는 IEnumerable 개체를 쿼리하는 기능도 포함되어 있습니다. 이제 SQL 쿼리를 실행하고 List/IEnumerable에 응답을 넣을 수 있습니다. 그런 다음 해당 목록에서 .GroupBy를 호출합니다 (System.Linq를 사용하여 추가해야합니다). –

관련 문제