找不到记录时返回零

JLa*_*nce 2 mysql sql jsp servlets

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

  • 进程 - 进程 ID、进程名称
  • 操作 - 操作 ID,操作名称
  • score - scoreID、score、processID、operationID、scoreType(分数类型为 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

Mar*_*ers 5

IFNULL不起作用的原因是它只对值有影响。没有行的结果集没有值,因此它什么也不做。

首先,在客户端执行此操作可能比在服务器上执行更好。但是,如果您必须在服务器上执行此操作,我可以想到几种方法。

尝试这个:

SELECT IFNULL(SUM(score), 0) AS score
FROM score
WHERE processID=? and operationID=? and type=?
ORDER BY processid
Run Code Online (Sandbox Code Playgroud)

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 = ?
)
Run Code Online (Sandbox Code Playgroud)