2017-04-05 17 views
0

私は2つのテーブルがあり、そのうちの1つにコメントが含まれ、他のテーブルには各コメントの評価が含まれています。 Here`sクエリ:sqlクエリ - 間違った結果

SELECT c.id, 
     c.parent_id, 
     c.name, 
     c.body AS comment, 
     c.user_id, 
     DATE_FORMAT(c.date_add, '%d %M %Y %H:%i') AS dt, 
     c.deleted, 
     IFNULL(SUM(r.rate), 0) AS rate 
FROM comments AS c 
LEFT JOIN 
(
    SELECT SUM(rating) AS rate, 
      comment_id AS comment_id 
    FROM rating 
    GROUP BY comment_id 
) r ON c.id = r.comment_id; 

テーブルの内容:

table Comments: 
id 
40 
41 
42 

table Rating: 
comment_id Rating 
41   -1 
42    1 

クエリが返す必要があります:

id  Rating 
41  -1 
42  1 
43  0 

戻り値:

id  Rating 
41  2 

はあなたが誰かが教えてもらえ私はどこに彼は間違います。

+0

このmysqlの、またはSQL-Serverです:あなたは

SELECT c.*, IFNULL(SUM(rating), 0) AS rate FROM comments AS c LEFT JOIN rating r ON c.id = r.comment_id GROUP BY c.id 

デモと同じ結果を得ることができますか?それらは違う。 – BeanFrog

+0

あなたの入力と予想される出力は何ですか? –

+0

それはmysqlです。入力 - コメントと評価のある表、各コメントの出力合計のレイティング。 – DotCom

答えて

0

以下のバージョンをお試しいただけますか?

SELECT c.id, 
     c.parent_id, 
     c.name, 
     c.body AS comment, 
     c.user_id, 
     DATE_FORMAT(c.date_add, '%d %M %Y %H:%i'), 
     c.deleted, 
     (SELECT SUM(rating) FROM rating r Where r.comment_id = c.id) AS rate 
FROM comments AS c; 
+0

出力をフォーマットしてください。 – toonice

+0

それは動作します!私のバージョンで何が間違っているのか分からない... – DotCom

0

なぜCOUNTをここで使用しますか?

IFNULL(COUNT(r.rate), 0) AS rate 

それはおそらく

IFNULL(r.rate, 0) AS rate 

最終的なクエリは次のようになりますする必要があります。しかし

SELECT c.*, 
     IFNULL(r.rate, 0) AS rate 
FROM comments AS c 
LEFT JOIN 
(
    SELECT SUM(rating) AS rate, 
      comment_id AS comment_id 
    FROM rating 
    GROUP BY comment_id 
) r ON c.id = r.comment_id; 

- あなたはサブクエリを必要としません。 http://rextester.com/UIK19423

+0

ありがとう。実際に私はSUMを使用して、ちょうどCOUNTを試して間違ってそれをコピーしました。修正されました。 – DotCom