sql - 当我得到 2 个或更多具有相同值的值时,仅更新 1 个(查询找到的第一个)值的方法?
Posted
技术标签:
【中文标题】sql - 当我得到 2 个或更多具有相同值的值时,仅更新 1 个(查询找到的第一个)值的方法?【英文标题】:sql - way to only update 1 (the first the query finds) value when i got 2 or more with the same value? 【发布时间】:2014-12-05 19:38:43 【问题描述】:我在 java 中有这段代码来替换我的高分表中的最低分数,但是如果我有两个或更多相同分数并且它是表中的最低分数,它将替换所有这些,但我只想替换其中的 1 个(其中任何一个)。
PreparedStatement PreparedStatement = conn.prepareStatement("UPDATE Highscore SET Name = ?, 分数 = ?, 时间 = ?, 等级 = ? WHERE Score = (SELECT TOP 1 Score FROM Highscore ORDER BY Score > ASC)");
preparedStatement.setString(1, name);
preparedStatement.setInt(2, score);
preparedStatement.setInt(3, time);
preparedStatement.setString(4, level);
int updateCount =preparedStatement.executeUpdate();
如果有办法只更新 1(查询找到的第一个)值,当我得到 2 个或更多具有相同值的值时,我会感到很痛苦。
【问题讨论】:
【参考方案1】:这似乎不是一个与 Java 相关的问题,而是一个与数据库设计相关的问题。
通俗地说,表中的每一行都必须是唯一可识别的(根据关系模型理论);这称为数据完整性。实现这一点的最简单方法是在表中添加一个属性作为主键。
通常,主键是一个从 1 开始的整数,并随着您在表中添加的每一行而递增。
现在来回答您的问题:只需向您的表添加一个主键,然后您的“位置”条件可以修改为:
UPDATE Highscore
SET Name = ?, Score = ?, Time = ?, Level = ?
WHERE PrimaryKey = (SELECT TOP 1 PrimaryKey FROM Highscore ORDER BY Score)
请注意,“where”条件会从您的分数中获取主键,为简单起见称为“PrimaryKey”,然后会更新。
【讨论】:
【参考方案2】:一种简单的方法是拆分您的查询?所以你得到了,比如说,id,然后进行更新。
否则,请检查:
UPDATE Table
SET Field = Whatever
WHERE id = (SELECT TOP 1 id FROM Highscore ORDER BY Score ASC)
【讨论】:
以上是关于sql - 当我得到 2 个或更多具有相同值的值时,仅更新 1 个(查询找到的第一个)值的方法?的主要内容,如果未能解决你的问题,请参考以下文章