2011-02-08 2 views
2

내가 달성하기 위해 노력하고 가입 대다 DB 테이블 '제품'테이블 '회사'MySQL은 질문

회사는 고유의 ID를 가지고 있으며, 제품의 주요 키로뿐만 아니라 고유 ID를 가지고 관계 .

그리고 'Sells'테이블에는 company_id 및 product_id가 있습니다. 다 - 대 - 다 관계가 될 것이므로이 테이블에 대한 기본 키가 없을 것입니다. 그렇습니까?

단일 회사에 속한 제품을 가져 오려면 MySQL 쿼리가 어떻게됩니까? 단일 쿼리에서이 작업을 수행 할 수 있습니까?

+0

"는 다 대다 관계가 될 것입니다 때문에, 오른쪽,이 테이블에 대한 기본 키가 없을 것?" 잘못된. 두 열이 모두 포함 된 복합 PK가 있습니다. –

+0

테이블의 개별 id에 기본 키를 가질 필요는 없지만'(company_id, product_id)'에 조합 된 인덱스를 넣을 수 있습니다. – ash

답변

1

필자는 개인적으로 Sells 테이블에서 composite (company_id, product_id)의 기본 키를 만들 것입니다. 만 원하는 경우 자신이, 제품 정보가 반환 된 쿼리로

:

select c.*, p.* 
    from Company c 
     inner join Sells s 
      on c.company_id = s.company_id 
     inner join products p 
      on s.product_id = p.product_id 
    where c.company_id = 123 
1

당신은로 구성된 기본 키를 가질 수 있습니다

select p.* 
    from Sells s 
     inner join products p 
      on s.product_id = p.product_id 
    where s.company_id = 123 

당신은 회사와 제품 정보를 반환하려면 여러 개의 열이 있으므로 조인트 테이블의 기본 키는 (company_id, product_id)이됩니다. 이 대다 관계가 될 것입니다 때문에

0

, 오른쪽,이 테이블에 대한 기본 키가 없을 것이다?

many - to - many 관계가 있다는 사실은 기본 키를 추가하는 데 방해가되지 않습니다. 자동 ID (Sale_Id)로 생성 할 수 있습니다. 주어진 회사가 동일한 제품을 한 번 이상 판매 할 수 있으므로 product_id + company_id에 의존해서는 안됩니다.

나는 하나의 회사에 속한 제품을 얻고 싶은 경우 MySQL의 쿼리는 무엇을 같은 것입니까? 단일 쿼리에서 을 수행 할 수 있습니까?

SELECT S.PRODUCT_ID FROM SALES S INNER JOIN COMPANY C ON (C.ID = S.COMPANY_ID) WHERE C.ID = XXX