【问题标题】:Null Column despite using Coalesce尽管使用了合并,但为空列
【发布时间】:2013-05-03 23:24:06
【问题描述】:

这是我的查询:

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  

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

【问题讨论】:

  • 可能是指other item_id
  • COALESCE(COUNT(item_id),0) 对我来说毫无意义,因为 COUNT() 永远不会返回 NULL
  • 您可以使用示例数据创建 sqlfiddle 并为您的查询发布所需的输出吗?
  • 您的数据库中某处的 item_id 字段中是否存在空值?
  • @peterm 查询完美运行,除非没有匹配的 item_id's 可以从表 review 中计数

标签: mysql sql coalesce


【解决方案1】:

我认为这应该可行:

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}'

【讨论】:

  • 谢谢。那太完美了。
猜你喜欢
  • 1970-01-01
  • 2015-05-25
  • 1970-01-01
  • 1970-01-01
  • 2016-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多