여러 ID와 관련된 행 선택 범위를 좁히는 방법에 대해 고민하고 있습니다. 다음은 데이터의 문제점입니다.SQL에서 여러 ID를 공유하는 행 검색
|Widget | |Widget Category | |Part Category | |Part |
+---------+ +--------------------+ +--------------+ +-------------+
|Id|Name | |WidId|CatId|CatName | |PartId| CatId | |Id|Name |
+---------+ +-----+-----+--------+ +------+-------+ +--+----------+
| 1|item01| | 1| 1|Windows | | 1| 1| | 1|Glass |
| 2|item02| | 2| 1|Windows | | 1| 2| | 2|Door Frame|
| 3|item03| | 3| 1|Windows | | 2| 2| | 3|Wheel |
| 4|item04| | 1| 2|Door | | 4| 2| | 4|Handle |
| 5|item05| | 5| 2|Door |
| 6|item06| | 6| 3|Trunk |
하나 이상의 위젯이 위젯 카테고리에 속할 수 있습니다. 많은 위젯 카테고리는 많은 부분 카테고리를 가질 수 있습니다. 많은 부품이 많은 부품 범주의 일부가 될 수 있습니다. 어떤 부품이 위젯에 연결되어 있는지 알아야합니다. 그래서 우리는 Item01에 "Glass"부품이 있고 Item05에 "Glass, Door Frame 및 Handle"부품이 있음을 알고 있습니다.
여기까지 필자가 가지고있는 SQL이지만 동적 인 경우 일주일에 한 번 저장 프로 시저에서 실행할 수 있습니다.
---- This gives me the Correct number of Widgets to Parts based on set of 2 category ID's as a quick and static hack
SELECT W.Id
FROM Widget W
INNER JOIN dbo.[WidgetCategory] WC1 ON WC1.WidId = W.Id
INNER JOIN dbo.[WidgetCategory] WC2 ON WC2.WidId = W.Id
WHERE WC1.CatId = 1 AND WC2.CatId = 2
GROUP BY W.Id
상기 질의에 대한 이유는 관련된 두 종류 및 부품에 관련된 모든 위젯의 교집합은 widgetid 년대 PartId 년대로 그룹화하는 테이블 구조를 얻을 수있다. 아래의 표는 내가 일부 (PartId BY COUNT (WidId) GROUP)에 얼마나 많은 위젯 집계 할 수 있도록려고하고있는 무슨이다 :
|WidId|PartId|WidgetName|
+-----+------+----------+
| 1| 1| Item01|
| 2| 1| Item02|
| 3| 1| Item03|
| 1| 2| Item01|
| 5| 2| Item05|
업데이트 질문 : 나는에서이 응답을 얻을 수있는 방법 위의 표는 두 카테고리의 교차 만 반환합니다.
|WidId|PartId|WidgetName|
+-----+------+----------+
| 1| 1| Item01|
| 1| 2| Item01|
어떤 도움을 주시면 감사하겠습니다. 슬프게하게해서 미안 해요. 주말에 가기 전에 빨리 게시해야했습니다.
편집 : 죄송합니다. ProductId에 관해서는 사용하고 있던 일부 SQL에서 남겨 두었습니다. 위젯 ID 여야합니다. 이 문제에 더 많은 명확성을 추가하고 추가 문제를 추가했습니다.
동적이어야한다는 것은 무엇을 의미합니까? – Cheruvian
ProductID는 어디에서 볼 수 있습니까? 왜 같은 테이블에서 두 번 조인을해야합니까? – Frazz
"동적"으로 말하면 부품 카테고리의 각 인스턴스에서 발생하는 모든 위젯 카테고리의 교차점을 찾아야한다는 의미입니다. – MarcusM