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