Mysql 未找到记录时返回零
我正在做一个表格生成器作为学校的一个项目。 在MySQL中,我有3个表,即进程、操作、分数。一切看起来都很好,直到我在web应用程序中测试了我的“添加列”按钮。 以前保存的数据应该正确读取,但也包括格式中的新列,问题是以前查询的数据不包括新表的任何值,因此我打算在未找到记录时返回0分,尝试了IFNULL和COALESCE,但没有任何结果(可能我只是使用错误)Mysql 未找到记录时返回零,mysql,sql,jsp,servlets,Mysql,Sql,Jsp,Servlets,我正在做一个表格生成器作为学校的一个项目。 在MySQL中,我有3个表,即进程、操作、分数。一切看起来都很好,直到我在web应用程序中测试了我的“添加列”按钮。 以前保存的数据应该正确读取,但也包括格式中的新列,问题是以前查询的数据不包括新表的任何值,因此我打算在未找到记录时返回0分,尝试了IFNULL和COALESCE,但没有任何结果(可能我只是使用错误) 进程-进程ID,进程名称 操作-操作ID,操作名称 分数-分数ID、分数、进程ID、操作ID、分数类型(分数 类型为SELF、GL、FI
- 进程-进程ID,进程名称
- 操作-操作ID,操作名称
- 分数-分数ID、分数、进程ID、操作ID、分数类型(分数 类型为SELF、GL、FINAL) ps=(PreparedStatement)dbconn.prepareStatement(“从其中processID=?和operationID=?和type=?ORDER BY processID的分数中选择分数”)
下面是一个小样本的图片IFNULL不起作用的原因是它只对值有影响。没有行的结果集没有值,因此它什么也不做 首先,在客户机上执行此操作可能比在服务器上更好。但是,如果必须在服务器上执行,我可以想出几种方法 试试这个:
SELECT IFNULL(SUM(score), 0) AS score
FROM score
WHERE processID=? and operationID=? and type=?
ORDER BY processid
SUM
确保只返回一行
如果需要在表包含多个匹配行时返回多行,则可以使用此选项(为了简单起见,省略ORDER BY):
回答得很好。。真的很感激。
SELECT score
FROM score
WHERE processID = ? and operationID = ? and type = ?
UNION ALL
SELECT 0
FROM (SELECT 0) T1
WHERE NOT EXISTS
(
SELECT *
FROM score
WHERE processID = ? and operationID = ? and type = ?
)