sql - 当我得到2个或更多相同值时,只更新1(查询找到的第一个)值的方法?

时间:2014-12-05 19:38:44

标签: java sql hsqldb

我在java中使用此代码来替换我的高分表中的最低分数但是如果我得到更多两个或更多具有相同分数并且它是表中的最小分数它将替换所有这些,但我只想要替换其中的一个(其中任何一个)。

  

PreparedStatement preparedStatement = conn.prepareStatement(" UPDATE Highscore SET Name = ?,      得分=?,时间=?,等级=?分数=(选择前1分得分高分ORDER BY分数> ASC)");

     

preparedStatement.setString(1,name);

     

preparedStatement.setInt(2,score);

     

preparedStatement.setInt(3,time);

     

preparedStatement.setString(4,level);

     

int updateCount = preparedStatement.executeUpdate();

嘿,当我得到2个或更多具有相同值的方法时,我是否有办法只更新1(查询找到的第一个)值。

2 个答案:

答案 0 :(得分:1)

一种简单的方法是拆分查询?所以你得到了id,然后再进行更新。

否则,请查看:

 UPDATE Table 
 SET Field = Whatever     
 WHERE id = (SELECT TOP 1 id FROM Highscore ORDER BY Score ASC)

答案 1 :(得分:1)

这似乎不是与Java相关的问题,而是与数据库设计相关的问题。

通俗地说,表格中的每一行都必须是唯一可识别的(根据关系模型理论);这称为数据完整性。实现此目的的最简单方法是在表中添加一个用作主键的属性。

通常,主键是从1开始的整数,并且对于在表中添加的每个附加行都会递增。

现在回答您的问题:只需在表格中添加一个主键,然后将“where”条件修改为:

UPDATE Highscore 
SET Name = ?, Score = ?, Time = ?, Level = ? 
WHERE PrimaryKey = (SELECT TOP 1 PrimaryKey FROM Highscore ORDER BY Score)

请注意,'where'条件从您的分数中获取主键,简称为'PrimaryKey',然后更新。