2012-05-10 4 views
0

이의 나는 다음과 같은 데이터가 있다고 가정 해 보자는 :는 SQL - 정렬 값을 기준으로 카티 제품에

Product 
IdPk | Name 
------------- 
guid1 | Printer 
guid2 | Oil 
guid3 | Etc. 
guid4 | Etc.. 

ProductPart 
PartIdPk| ItemId | PartName 
------------------------- 
guid100 | guid1 | Ink 
guid101 | guid1 | Paper 
guid102 | guid2 | Automobile Fuel 
guid103 | guid2 | Cooking 

ProductPartType 
TypeIdPk| ItemId | PartId | TypeName 
--------------------------------- 
guid200 | guid1 | guid100 | Cyan   < Types of ink 
guid201 | guid1 | guid100 | Magenta 
guid202 | guid1 | guid100 | Black 
guid203 | guid1 | guid100 | Yellow 
guid204 | guid1 | guid101 | Photocopier  < Types of paper 
guid205 | guid1 | guid101 | Envelope 
guid206 | guid1 | guid101 | Card 
guid207 | guid2 | guid102 | Petrol   < Types of automobile fuel 
guid208 | guid2 | guid102 | Diesel 
guid209 | guid2 | guid103 | Olive   < Types of cooking oil 
guid210 | guid2 | guid103 | Sunflower 

따라서, 각 제품은 하나 개 이상의 부품을 가지고 있으며, 각 부분은 하나 개 이상의 유형이 있습니다.

제품, 부품 및 유형을 선택하고 싶습니다. 수천 개의 항목이있을 수 있으므로 일반적으로 선택하는 것과 동시에 필터링하는 것이 좋습니다. 이 세 테이블은 종종 데카르트 제품 쿼리로 이어질 것이고, 그 시나리오에서 "나에게 (잉크가있는 타입 이름으로) 정렬 된 상위 2 개의 제품을 제공하십시오."와 같은 쿼리를 실행해야합니다. 일부는 요리) "

누구 아이디어가 있습니까?

select ppt.*, pp.PartName, p.Name 
from ProductPartType ppt join 
    ProductPart pp 
    on ppt.PartId = pp.PartId join 
    Product p join 
    pp.ItemId = p.idPK 
where <whatever> 

그런 다음 당신은 당신이 원하는대로 쿼리를 수행 할 수 있습니다 사전

+0

사실, 테이블 구조는 처음에는 외관이 다소 어색해 보입니다. Product 테이블, TypeCategory Table (잉크, 용지), TypeCategory (Cyan, Magenta, 검은 색) 및 ProductType 테이블 (제품과 특정 유형이있는 많은 테이블) 내가 뭐 놓친 거 없니 ? –

+0

나는 문제 영역을 설명 할 수있는 한 당신이 묘사하는 테이블과 유사하다고 말할 수는 있지만 간결함을 단순화하려고했습니다. 즉, 원한다면 특정 행이 "열"을 나타내는 데카르트 제품에서 가능합니다. 해당 행별로 효과적으로 정렬하는 쿼리를 만드시겠습니까? 당신은 x가 값을 가지고있는 각 행에 대해 왼쪽 외부 조인으로 인해 y가 null 일 수 있기 때문에 "sort by x by y"를 말할 수 없다는 것을 염두에 두어야합니다. –

+0

x로 순서를 제안했을 것입니다. : 널 값으로 주문할 수 있음을 알거나 "주문"([xx]가 Null 인 경우 'abc'Else 'xyz'End). 다시 한 번 사례를 제시하십시오. 이렇게하면 대답을 더 쉽게 할 수 있습니다. –

답변

0

많은 덕분에 당신은 무엇을 찾고있는 테이블에 쿼리를 조인 단지 기본입니다. 주문할 자연스러운 물건이 없기 때문에 "최고"검색어가 명확하지 않습니다.

제품 부품 및 제품 부품 유형 레벨 모두에 제품이 있으므로 데이터 구조에 문제가 있습니다. 일관성을 유지하기 위해서는 제품 부분 일뿐입니다.

일반적으로 "직교 좌표 곱"조인은 등 결합이 아닌 교차 조인을 나타 내기 위해 사용됩니다. 성능 향상을 위해 테이블에 인덱스를 추가 할 수 있습니다. 그러나, 당신은 아마 그들을 필요로하지 않습니다.