【问题标题】:Can I replace the null values with text for an outer join in MySQL我可以用文本替换空值以在 MySQL 中进行外部连接吗
【发布时间】:2016-07-24 22:44:58
【问题描述】:

我正在尝试用一些文本替换查询中的 null,而不是通过代码来完成。

查询写成如下:

mysql> SELECT title, AVG(rating) AS avg_rating FROM movie m LEFT OUTER JOIN rating r ON m.movi​​eID = r.movi​​eID WHERE year

+-------------------------------------+------------+
| title                               | avg_rating |
+-------------------------------------+------------+
| Davy Crockett and the River Pirates |     3.6667 |
| Dumbo                               |     2.0000 |
| Fantasia                            |     1.5000 |
| Rocky                               |       NULL |
| Superman                            |       NULL |
| The Godfather                       |       NULL |
| The Jungle Book                     |     4.6667 |
+-------------------------------------+------------+

是否可以有一个文本说“没有评级”而不是 NULL?

【问题讨论】:

  • 是的。但是该列的数据类型需要更改为“文本”(您不能有一列在某些行中包含字符串,在某些行中包含数字)
  • @Strawberry 确实有效!奇怪的是,虽然使用 MySQL 工作台,但它给出了“blob”的输出
  • 在这种情况下,即使 IFNULL 也会给出正确的解决方案,对吧?
  • Fdreger 弄错了,或者可能误解了要求。应该没有必要将整数类型转换/转换为文本,但也许工作台需要推动。无论哪种方式,都不要更改列的数据类型!
  • @Strawberry:也许你误解了我的评论?无论您如何处理查询(合并,何时,您命名它) - 结果将是一列字符串,而不是数字。这可能是个问题。或者可能不是问题。取决于稍后对查询结果做了什么。

标签: mysql left-join


【解决方案1】:

我能够通过以下查询解决问题:

SELECT title,
COALESCE(AVG(rating),'NIL') AS avg_rating
FROM movie m LEFT OUTER JOIN rating r ON m.movieID = r.movieID
WHERE `year` < 1980
Group BY title

信用:@草莓

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-15
    • 2012-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多