2

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

  • 进程 - 进程 ID、进程名称
  • 操作 - 操作 ID、操作名称
  • score - scoreID, score, processID, operationID, scoreType (score types are 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

4

1 回答 1

5

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 = ?
)
于 2012-05-12T06:00:11.903 回答