1

这是我的查询:

SELECT 
    i.item, 
    COALESCE(COUNT(r.item_id), 0) AS TotalRating, 
    SUM(r.rating) as RatingSum,  
    re.tR as TotalReview,
    AVG(r.rating) AS AverageRating
FROM items AS i
LEFT JOIN ratings AS r
    ON (r.item_id = i.item_id)
LEFT JOIN
    (SELECT item_id,COALESCE(COUNT(item_id),0) AS tR
    FROM reviews
    WHERE item_id = '{$itemId}') AS re
ON re.item_id = i.item_id  
WHERE i.item_id = '{$itemId}';

我不断收到此错误:

#1048 - Column 'item_id' cannot be null  

该行与 table 的子查询有关reviews。我正在使用Coalesce;为什么它仍然说它为空?

4

1 回答 1

3

我认为这应该有效:

SELECT i.item,
       r.totalRating, COALESCE(r.ratingSum, 0), COALESCE(r.averageRating, 0),
       re.totalReview
FROM items i
JOIN (select COUNT(*) totalRating, SUM(rating) ratingSum, AVG(rating) averageRating
      FROM ratings
      WHERE item_id = '${item_id}') r
ON (1 = 1)
JOIN (select COUNT(*) totalReview
      FROM reviews
      WHERE item_id = '${item_id}') re
ON (1 = 1)
WHERE item_id = '${item_id}'
于 2013-05-04T00:07:07.587 回答