2009-10-29 8 views
1

두 개의 테이블 'Category'와 'Product'가 있습니다. 카테고리 I에는 catidcat name이 있습니다. 제품 표에는 item-id, item-name, catid이 있습니다.SQL 복합 쿼리

내가 수행해야하는 작업은 item namecategory name의 결과를 표시하는 것입니다. 그러나 카테고리 이름은 여러 것입니다. 따라서 한 제품에 여러 범주가있을 수 있습니다.

답변

2

스키마에 제품 테이블에 카테고리 ID가 있으면 아니오, 하나의 제품에는 여러 카테고리가있을 수 없습니다. 범주에 제품을 연결하는 또 다른 M : N 테이블이있는 경우 질문을 업데이트해야합니다.

+0

제품 테이블의 범주 ID는 그래서 1 2,3,4와 같은 제품은 수있다 여러 카테고리가있는 경우 – Santanu

+3

좋습니다. 그런 다음 http://en.wikipedia.org/wiki/Database_normalization을 읽어야합니다. 이러한 복합 열을 사용하면 어렵고 느리게 진행됩니다. –

+0

데이터 모델에 영향을 주거나 주어진 데이터 모델에 영향을 줄 수 있습니까? 이것은 대부분의 사용 시나리오에서 매우 차선책이기 때문에. – tijmenvdk

4

당신은 다른 테이블에 해당하는 여러 줄이 각 라인을 허용 할하기 때문에 조인 테이블의 세 개의 테이블을 생성 할 수 있습니다 :

Category  : catid catname 
Product   : itemid itemname 
CategoryProduct : catid itemid 

그래서 제품은 0, 1 개 이상의 카테고리를 가질 수를 . 귀하의 코멘트에 회신에서

catid itemid  in CategoryProduct 
    1  3 
    1  4 
    2  3 
    2  4 
2

:

제품 테이블 의 카테고리 ID가 2처럼 두 제품 갖는 동일한 두 범주에 대한 조인 테이블

예 콘텐츠 , 3,4 그래서 1 제품은 여러 카테고리를 가질 수 있습니다

테이블 구조를 변경할 수 있다면 물론, KLE의 조언을 따르십시오. 이는 정상적이고 유지 보수가 가능한 접근 방식입니다. 당신은 테이블 구조를 변경할 수없는 경우

, 당신은이 같은 해킹으로 카테고리를 조회 할 수 있습니다

select * 
from product p 
inner join category c 
    on ',' + p.catid + ',' 
     like '%,' + cast(c.catid as varchar) + ',%' 
+1

데이터베이스에 의존하지만, 예를 들어 MySQL에서는'ON find_in_set (c.catid, p.catid)'를 할 수 있습니다. –