2010-04-06 9 views
0

나는 일반적인 테이블 섹션을 정의하는 테이블이 세 개 있습니다.
-Section 테이블이 있습니다.
- Category 테이블 -> "섹션"열 (외래 키)이 있습니다.
- Product 테이블 -> "카테고리"열 (외래 키)이 있습니다.SQL 쿼리 다중 테이블 선택

X 섹션에 속한 모든 제품을 가져오고 싶습니다.

어떻게하면됩니까?

선택에서 선택 하시겠습니까?

답변

0

여기에 같은 대답 많아요. 웬일인지, 그들 모두는 Section 테이블에 합류하고있다. @ nemiss의 요청에 따라

select 
    p.* 

from 
    Product p, 
    Category c 

where 
    p.category_id = c.id and 
    c.section_id = 123 
; 

명시 ANSI JOIN 구문 : (대신 ID의) 제 이름을 기준으로 선택 제품 :

select 
    p.* 

from Product p 

join Category c 
    on c.id = p.category_id 
and c.section_id = 123 
; 

가능한 이유는 Section 테이블을 포함합니다.

select 
    p.* 

from Product p 

join Category c 
    on c.id = p.category_id 

join Section s 
    on s.id = c.section_id 
and s.name = 'Books' 
; 

이 일을하는 경우, 당신은

alter table Product add index name; 
+0

예 색인 Section.name을 확인하는 것이 좋습니다! 섹션은 필요하지 않습니다 !! 그것은 단지 섹션에 대한 정보를 정의하지만 내 쿼리에 기여하지 않습니다! – nemiss

+0

(form table1, table2)에서 multi를 사용하는 것이 좋지 않습니다. 대신 join을 사용하도록 변경할 수 있습니까? – nemiss

+0

섹션에 가입하지 않아도되지만 일반적으로 ID를 기반으로 직접 쿼리하는 것이 아니라 행의 일부 특성을 쿼리합니다. 검색어는 짧지 만 유연성이 떨어집니다. 또한 데이터베이스에 FK 관계가 명시 적으로 적용되지 않으면 c.section_id에 존재하지 않는 값이 포함될 수 있기 때문에 문제가됩니다. –

0
select s.section, p.* 
from section s 
inner join category c on c.section = s.section 
inner join product p on p.category = c.category 
where s.section = 'section1' 
0
select p.* 
from Product p 
join Category c on p.CategoryId = c.Id 
join Section s on c.SectionId = s.Id 
where s.Id = @val 
4
Select 
    prod.* 
FROM 
    Product prod 
    INNER JOIN Category cat ON prod.category = cat.id 
    INNER JOIN Section sec ON cat.section = sec.id 
WHERE 
    sec.id = X