我正在做一个桌子发生器作为一个学校的项目。在MySQL中,我有三个表,即过程、操作、分数。一切看起来都很好,直到我测试了我的“添加列”按钮在网络应用程序。以前保存的数据应该正确读取,但也应该包含新列的格式,问题是以前查询的数据不包括新表的任何值,所以如果没有找到记录,我希望它返回0的分数,尝试IFNULL和整合,但是什么也不会发生(也许我只是使用错误)
processName
ps = (PreparedStatement)dbconn.prepareStatement("SELECT分数从processID=?和operationID=?及type=?ORDER的得分中获得);
下面是一个小样本http://i50.tinypic.com/2yv3rf9.jpg的图片
发布于 2012-05-12 06:00:11
IFNULL不能工作的原因是它只对值有影响。没有行的结果集没有值,所以它什么也不做。
首先,在客户机上这样做可能比在服务器上更好。但是,如果您必须在服务器上这样做,我可以想到几种方法。
试试这个:
SELECT IFNULL(SUM(score), 0) AS score
FROM score
WHERE processID=? and operationID=? and type=?
ORDER BY processidSUM确保准确地返回一行。
如果需要在表包含多个匹配行时返回多行,则可以使用此方法(为了简单起见,省略ORDER ):
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 = ?
)https://stackoverflow.com/questions/10561440
复制相似问题