2012-02-28 4 views
0

두 테이블의 JOIN을 수행하고 HAVING을 사용하여이 두 테이블을 필터링 할 때 mysql에 문제가있다.Mysql Join, Sum, Having, Group By. Cath figure out out

제품 :

id | Name 
1 | Product 1 
2 | Product 2 
3 | Product 3 

리뷰 :

가정 내 테이블은 다음과 같이

Name  | Product_id | score 
Review 1 | 1   | 10000 

내 추측은 다음되었다, 그러나 그것은 작동하지 않습니다 :

SELECT "products".*, sum("reviews".score) FROM "products" INNER JOIN "reviews" ON "reviews"."empire_id" = "products"."id" GROUP BY products.id HAVING sum("reviews".score)=0; 

점수가 0 인 제품, 즉 검토를받지 않았 음을 의미합니다. 나는 이것이 쉬워 져야한다고 생각하지만, 나는 알아낼 수 없다.

답변

1

"제품"테이블에는 표시되지만 "리뷰"테이블에는 표시되지 않는 제품이 필요합니다. 아마도 SQL - find records from one table which don't exist in another을 살펴 보시겠습니까?

또는 INNER JOIN을 LEFT JOIN으로 바꾸어도됩니다.

+1

당신이 그것을 이해하도록 도왔습니다. 아웃! , products.name 데 감사 SELECT products.id, products.name, 합계 제품 FROM ("리뷰".score) LEFT는 products.id에 의해 reviews.product_id = products.id 그룹에 대한 리뷰를 가입 SUM ("reviews".SCORE) IS NULL입니다. –

0
SELECT products.id, products.name, sum("reviews".score) 
FROM products 
LEFT JOIN reviews ON reviews.product_id = products.id 
GROUP BY products.id, products.name 
HAVING sum(reviews.score)=0; 

"리뷰". "empire_id"= "제품". "ID"

은 "리뷰"이어야한다. "PRODUCT_ID"= "제품". "ID"

사실

그룹 by 제품의 모든 필드 이름이 있어야합니다.

+0

당신은 SQL에 대한 질문에 u가 필요합니다. 단지 조인에 약간의 오류가 있습니다. – Churk

+0

음, 실제로 작동하지 않았습니다. 리뷰가 첨부 된 제품에만 적용됩니다. 하지만 제품에 아무 것도 붙이지 않은 제품을 원한다면 (즉, product_id 필드에 해당 제품의 ID가있는 리뷰가 없다면 작동하지 않습니다 ...) –

+0

왼쪽 연결을 사용하십시오 – Churk