未找到记录时返回零

时间:2012-05-12 05:56:14

标签: mysql sql jsp servlets

我正在制作一个表生成器作为学校项目。 在MySQL中我有3个表,即进程,操作,得分。一切都很好看,直到我在网络应用程序中测试了我的“添加列”按钮。 以前保存的数据应该正确读取,但也包括格式的新列,问题是先前查询的数据不包括新表的任何值,所以我打算如果没有找到记录则返回0分,试过IFNULL& COALESCE但没有任何反应(也许我只是错误使用它)

  • process - processID,processName
  • 操作 - operationID,operationName
  • 得分 - 得分ID,得分,进程ID,操作ID,得分类型(得分 类型是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

1 个答案:

答案 0 :(得分:4)

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 = ?
)