이 SQLFiddle에서 상호 작용하는 예를 참조하십시오
이
SELECT
p.title,
c.name as category
FROM product p
INNER JOIN product_to_categories pc on pc.product_id = p.product_id
INNER JOIN category c on c.category_id = pc.category_id
WHERE p.lang='en' and c.category_id in (3, 4)
로 보일 것이다 결과의 예는 다음과 같습니다
---------------
title | name
---------------
Apple | Green
Apple | Red
Kiwi | Green
그룹화 범주
당신이 그룹에 원하는 경우 내용,
postgres
(9.0 이후)에는 0이라고하는
built in function이 있습니다.
SELECT
p.title,
string_agg(c.name, ', ') as category
FROM product p
INNER JOIN product_to_categories pc on pc.product_id = p.product_id
INNER JOIN category c on c.category_id = pc.category_id
WHERE p.lang='en' and c.category_id in (1, 3)
GROUP BY p.product_id, p.title
ORDER BY p.title
이
SQLFiddle에서 상호 작용하는 예를 참조하십시오 다음과 같이 스크립트를 조작 할 경우 사용할 수 1,231,375,.
로 보일 것이다 결과의 예는 다음과 같습니다의
---------------
title | name
---------------
Apple | Red, Green
Kiwi | Green
설명은 당신이 당신의 결과 세트와 상호 작용하는 방법을 이해하면 이해 SQL 조인
은 간단 결합합니다. 다음은 great reference입니다. 이미지는이 게시물에서 halfgaar에 의해 참조됩니다.
- INNER는 반환 두 결과 집합이 교차 세트 가입하세요.
왼쪽 결과 집합의 모든 행이 왼쪽과 교차 권리 세트에서 존재하지만 행있는 집합을 반환합니다.
는 조인 LEFT OUTER 그러나 반대로 같은 않습니다.
하나 개의 큰 결과 집합에 두 세트를 결합합니다.
답변 해 주셔서 감사합니다. 그러나 제품이 여러 범주에 영향을받는 경우 어떻게 반환됩니까? 동일한 제품의 여러 줄이 각 카테고리 이름과 함께 있습니까? – Anselme
기사에서 언급 한 SQL 바이올린 링크를 사용하여 실행할 수 있지만 결과 샘플을 제공하기 위해 응답을 업데이트했습니다. 제품에 대한 범주가 여러 개인 경우 해당 제품의 여러 행을 반환합니다. 어떻게 데이터를 반환 할 것인지 예를 제공 할 수 있습니까? – cbillowes
SQL 피들 (SQL Fiddle)에 감사드립니다. 매우 훌륭합니다. 어떻게 든 나는 같은 제품의 중복 된 행을 피하고 제품이 severa 카테고리에 속하면 제품 행에있는 모든 카테고리 이름을 혼수로 구분하여 그룹화합니다. 나는 이것이 GROUP By 절이 유용하지 않은 곳이라고 생각한다. – Anselme