2013-04-21 2 views
0

1 대 다수 관계가 존재할 때 Ive가 SQL 쿼리를 가져와 1 레코드를 다시 가져 오려고합니다.일대 다 관계가 존재하는 레코드의 인스턴스를 하나만 얻으려는 SQL 쿼리

SELECT  dbo.BlogEntries.ID AS blog_entries_id, dbo.BlogEntries.BlogTitle, dbo.BlogEntries.BlogEntry, dbo.BlogEntries.BlogName, 
         dbo.BlogEntries.DateCreated AS blog_entries_datecreated, dbo.BlogEntries.inActive AS blog_entries_in_active, 
         dbo.BlogEntries.HtmlMetaDescription AS blog_entries_html_meta_description, dbo.BlogEntries.HtmlMetaKeywords AS blog_entries_html_meta_keywords, 
         dbo.BlogEntries.image1, dbo.BlogEntries.image2, dbo.BlogEntries.image3, dbo.BlogEntries.formSelector, dbo.BlogEntries.image1Alignment, 
         dbo.BlogEntries.image2Alignment, dbo.BlogEntries.image3Alignment, dbo.BlogEntries.blogEntryDisplayName, dbo.BlogEntries.published AS blog_entries_published, 
         dbo.BlogEntries.entered_by, dbo.BlogEntries.dateApproved, dbo.BlogEntries.approved_by, dbo.blog_entry_tracking.id AS blog_entry_tracking_id, 
         dbo.blog_entry_tracking.blog, dbo.blog_entry_tracking.blog_entry, dbo.BlogCategories.ID, dbo.BlogCategories.BlogCategoryName, 
         dbo.BlogCategories.BlogCategoryComments, dbo.BlogCategories.DateCreated, dbo.BlogCategories.BlogCategoryTitle, dbo.BlogCategories.BlogCategoryTemplate, 
         dbo.BlogCategories.inActive, dbo.BlogCategories.HtmlMetaDescription, dbo.BlogCategories.HtmlMetaKeywords, dbo.BlogCategories.entry_sort_order, 
         dbo.BlogCategories.per_page, dbo.BlogCategories.shorten_page_content, dbo.BlogCategories.BlogCategoryDisplayName, dbo.BlogCategories.published, 
         dbo.BlogCategories.blogParent 
FROM   dbo.BlogEntries LEFT OUTER JOIN 
         dbo.blog_entry_tracking ON dbo.BlogEntries.ID = dbo.blog_entry_tracking.blog_entry LEFT OUTER JOIN 
         dbo.BlogCategories ON dbo.blog_entry_tracking.blog = dbo.BlogCategories.ID 

나는 2 개의 다른 blogcategories에 할당 된 레코드를 가지고 있으며, 나는 모든 것을 쿼리 할 때 중복 레코드를 반환한다.

블로그의 인스턴스를 1 개만 반환하는 방법은 무엇입니까?

+0

SELECT DISTINCT .... –

+0

게시물을 잘못 읽었 기 때문에 답을 삭제했습니다. 피터가 옳아. SELECT DISTINCT는 원하는 것입니다. – ApplePie

+1

'BlogEntries'는 블로그의 개별 인스턴스를 보유합니까? (테이블 이름은 블로그의 개별 게시물을 보유하고있는 것처럼 들리게 만듭니다.) 블로그 카테고리 제목 (예 : 블로그 카테고리 제목)을'select' 절에 포함 시키면'select distinct'는 귀하의 질의가 추적되는 모든 범주를 반환하기 때문에 다른 범주에서 동일한 블로그를 사용할 수 있습니다. 블로그의 첫 번째 카테고리에 대한 세부 정보 만 가져오고 싶습니까 (그리고 어떤 카테고리를 처음으로 결정하겠습니까?). –

답변

1

이 하나의 시도 - 내가 열 이름에 별칭의 사용,이 경우 그 언급하고 싶습니다 또한

SELECT blog_entries_id = be.Id 
    , be.BlogTitle 
    , be.BlogEntry 
    , be.BlogName 
    , blog_entries_datecreated = be.DateCreated 
    , blog_entries_in_active = be.inActive 
    , blog_entries_html_meta_description = be.HtmlMetaDescription 
    , blog_entries_html_meta_keywords = be.HtmlMetaKeywords 
    , be.image1 
    , be.image2 
    , be.image3 
    , be.formSelector 
    , be.image1Alignment 
    , be.image2Alignment 
    , be.image3Alignment 
    , be.blogEntryDisplayName 
    , blog_entries_published = be.published 
    , be.entered_by 
    , be.dateApproved 
    , be.approved_by 
    , blog_entry_tracking_id = bet.Id 
    , bet.blog 
    , bet.blog_entry 
    , bc2.Id 
    , bc2.BlogCategoryName 
    , bc2.BlogCategoryComments 
    , bc2.DateCreated 
    , bc2.BlogCategoryTitle 
    , bc2.BlogCategoryTemplate 
    , bc2.inActive 
    , bc2.HtmlMetaDescription 
    , bc2.HtmlMetaKeywords 
    , bc2.entry_sort_order 
    , bc2.per_page 
    , bc2.shorten_page_content 
    , bc2.BlogCategoryDisplayName 
    , bc2.published 
    , bc2.blogParent 
FROM dbo.BlogEntries be 
LEFT JOIN dbo.blog_entry_tracking bet ON be.Id = bet.blog_entry 
OUTER APPLY (
    SELECT TOP 1 * 
    FROM dbo.BlogCategories bc 
    WHERE bet.blog = bc.Id 
) bc2 

하면 쿼리의 크기를 감소하고 이해를보다 편리하게 .

0

당신은 단지 하나 개의 레코드 다시해야하는 경우 (당신이 지금 가지고있는 동일), 당신이 AS blog_entries_id

SELECT TOP 1 dbo.BlogEntries.ID, dbo.Bl을 .... 사용할 수 있습니다.

보다 효율적입니다. SELECT DISTINCT보다

0

여기는 Northwind 예제입니다.

각 주문에 대한 주문 세부 테이블에서 1 행만 반환합니다.

Use Northwind 
GO 

Select COUNT(*) from dbo.Orders 
select COUNT(*) from dbo.[Order Details] 


select * from dbo.Orders ord 
join 
(select ROW_NUMBER() OVER(PARTITION BY OrderID ORDER BY UnitPrice DESC) AS "MyRowID" , * from dbo.[Order Details] innerOD) derived1 
on ord.OrderID = derived1.OrderID 
Where 
derived1.MyRowID = 1 
Order by ord.OrderID 
관련 문제