例如:我们有一张table Person 带列 Name, Age .如果table Person 是空的,我希望默认值为 "no person" 在 Name 列和 0 在 age 列。我们怎么做?我试过了 IFNULL 但它没有给出任何默认值。它只显示表为空。
Person
Name, Age
"no person"
Name
0
age
IFNULL
5ktev3wc1#
你不会在数据库里做这个,你会在前端做。如果您绝对坚持db应该提供此数据,那么一个可能的查询如下所示:
SELECT Name, Age FROM Person UNION ALL SELECT 'No person', 0 FROM dual a WHERE NOT EXISTS (SELECT 1 FROM Person)
所有这些建议coalesce或ifnull的人似乎都忽略了一个事实,即根本没有任何行可供选择。在上面的查询中,最下面的查询(union all之后的所有内容)是一个查询,如果person在其中没有任何记录,那么它将生成一行
qv7cva1a2#
使用 COALESCE ```select case when name<>''then COALESCE (name,'No name') else 'No name' end,COALESCE (age,0) from Person
COALESCE
qrjkbowd3#
对检查表中行数的查询使用联合:
SELECT name, age FROM Persons UNION ALL SELECT 'no person', 0 FROM DUAL WHERE (SELECT COUNT(*) FROM Persons) = 0 ``` `DUAL` 是一个伪表名,可以在不需要引用实表的查询中使用。
2cmtqfgy4#
为什么需要数据库的这种输出?我认为您应该从处理查询提供的数据所使用的语言开始。我认为建议的解决方案是错误的,因为如果表是空的,它们只给出一个空集
4条答案
按热度按时间5ktev3wc1#
你不会在数据库里做这个,你会在前端做。
如果您绝对坚持db应该提供此数据,那么一个可能的查询如下所示:
所有这些建议coalesce或ifnull的人似乎都忽略了一个事实,即根本没有任何行可供选择。在上面的查询中,最下面的查询(union all之后的所有内容)是一个查询,如果person在其中没有任何记录,那么它将生成一行
qv7cva1a2#
使用
COALESCE
```select case when name<>''
then COALESCE (name,'No name') else 'No name' end,
COALESCE (age,0) from Person
qrjkbowd3#
对检查表中行数的查询使用联合:
2cmtqfgy4#
为什么需要数据库的这种输出?我认为您应该从处理查询提供的数据所使用的语言开始。我认为建议的解决方案是错误的,因为如果表是空的,它们只给出一个空集