2014-12-05 21 views
0

我有这个代码在Java中取代我的高分表中的最低分数,但如果我有更多的两个或更多的相同分数,它是表中的最低分数,它将取代所有这些,但我只想取代其中1个(其中任何一个)。SQL - 只有更新1(第一个查询发现)值的方式,当我有2个或更多具有相同的值?

的PreparedStatement preparedStatement时= conn.prepareStatement( “UPDATE排行榜SET?name =上, 分数=?,时间=?,等级=?WHERE分数=(SELECT TOP 1点从排行榜ORDER BY得分> ASC)” );

preparedStatement.setString(1,name);

preparedStatement.setInt(2,score);

preparedStatement.setInt(3,time);

preparedStatement.setString(4,level);

int updateCount = preparedStatement.executeUpdate();

嘿,我是woundering如果有一种方法来更新1(第一个查询发现)值,当我有2个或更多具有相同的值。

回答

1

这似乎与Java有关的一个问题并不而是涉及到数据库的设计之一。通俗地说,表格中的每一行必须是唯一可识别的(根据关系模型理论);这被称为数据完整性。实现这一点的最简单方法是在表中添加一个作为主键的属性。

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

我们来到你的问题:只需添加一个主键到表,然后你的“where'条件可以被修改为:

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

注意” where'条件得到主键,简单地称为'PrimaryKey',从你的分数开始,然后将被更新。

1

一个简单的方法将是拆分您的查询?所以你得到,比如id,然后进行更新。

否则,检查了这一点:

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