2012-02-28 41 views
0

我有一个问题,当做一个JOIN的两个表和过滤使用HAVING这两个表。Mysql加入,总和,拥有,分组依据。无法解决

假定我的表是这样的:

产品:

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

您帮我理解了它出来了! 由于 SELECT products.id,products.name,总和( “评论” .score) FROM产品 LEFT JOIN评论ON reviews.product_id = products.id GROUP BY products.id,products.name HAVING SUM(“reviews”.SCORE)是NULL; – 2012-02-28 00:50:37

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”

其实你的组通过应该有你的产品的所有字段名称

+0

你的SQL应该得到你所要求的,只是连接有一些错误 – Churk 2012-02-28 00:15:15

+0

mmm,它并没有真正的工作。它只适用于附有评论的产品。但是,如果我想获得没有附加任何东西的产品(例如,没有在product_id字段中包含该产品ID的评论,则该产品不起作用...) – 2012-02-28 00:26:52

+0

使用左连接 – Churk 2012-02-28 00:34:48