0

2 つの内部結合を行う次のクエリがあります。評価テーブルに account_id のエントリがない場合を除き、これは正常に機能します。

SELECT c.comment_id, a.account_id, a.first_name, a.second_name, a.points, a.image_url, c.body, c.creation_time, AVG(r.rating_overall)
FROM comments AS c
INNER JOIN accounts AS a
ON c.account_id=a.account_id
INNER JOIN ratings AS r
ON r.baker_id=a.account_id
WHERE c.blog_id = ?
GROUP BY c.comment_id, a.account_id, a.first_name, a.second_name, a.points, a.image_url, c.body, c.creation_time
ORDER BY c.creation_time DESC

評価テーブルにエントリがない場合でも、このクエリが結果を返すようにするにはどうすればよいですか? 言い換えればAVG(r.rating_overall) = 0、評価がない場合はいつでもプロデュースしますか?

4

1 に答える 1

2

LEFT JOIN を使用する必要があります。

SELECT
  ...
FROM comments AS c
  INNER JOIN accounts AS a
  ON c.account_id=a.account_id
  LEFT JOIN ratings AS r
  ON r.baker_id=a.account_id

....

これは、前の結合からすべての行を返し、最後の結合に一致する行のみを返します。一致しない場合、評価テーブルのすべての列が null になります。

このSQL 結合の視覚的な説明で、結合について詳しく学びます。

于 2013-06-29T16:48:51.190 に答える