【问题标题】:Return zero when records not found未找到记录时返回零
【发布时间】:2012-05-20 15:29:12
【问题描述】:
我正在制作一个表格生成器作为一个学校项目。
在 MySQL 中,我有 3 个表,即进程、操作、分数。一切看起来都很好,直到我在网络应用程序中测试了我的“添加列”按钮。
以前保存的数据应该被正确读取但也包括格式中的新列,问题是以前查询的数据不包含新表的任何值,所以我打算如果没有找到记录它返回0分,试过了IFNULL & COALESCE 但什么也没发生(也许我只是用错了)
- 进程 - 进程 ID、进程名称
- 操作 - 操作 ID、操作名称
-
score - scoreID, score, processID, operationID, scoreType (score
类型是 SELF,GL,FINAL)
ps = (PreparedStatement)dbconn.prepareStatement("SELECT score FROM score WHERE processID=? and operationID=? and type=?ORDER BY processid");
这是一个小样本的图片http://i50.tinypic.com/2yv3rf9.jpg
【问题讨论】:
标签:
mysql
sql
jsp
servlets
【解决方案1】:
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 = ?
)