java - 如何猜测或确定 SQL 标识字段并避免重复

标签 java sql sql-server jdbc distinct

我试图避免对数据的重复更新,所以我想知道是否有一种方法可以只更新一个行字段而不更新后续行中的一条数据。这是场景,我有以下代码:

String sql = "update VAGAS set Matricula ='" +txtMat.getText()
    + "'  where Curso ='" +combocurso.getSelectedItem().toString()
    + "' AND Turma='"+turmacombo.getSelectedItem().toString()+"'";
pstmt = conLogin.prepareStatement(sql);
pstmt.execute();
JOptionPane.showMessageDialog(null, "Vagas atualizados com sucesso!");

我想要更新字段 Matricula(这意味着学生订阅 ID),其中类(class) (Curso) 等于 combocurso.getSelectedItem().toString () 组合框,其中 turma(表示类(class)教室已填满小组)等于 combocurso.getSelectedItem().toString() 组合框。

除了一个问题外,一切都更新正常,例如,我有具有相同名称 (1ACC) 的 Matricula 行,这代表 2 个教室空缺。当我调用更新时,它会用一个 Matricula 数字填充它们,这是不希望的,因为我只想填充一个空缺,但由于它们具有相同的名称,因此它会填充两者。

因此有一个名为 Vagas 的第一个字段(列)(不是表名,而是列名),它是一个 int Identity (1,1) 字段,当我调用更新命令时,我只想填写一个字段。我试图通过与 Vagas 列进行比较来做到这一点,但我似乎找不到一种方法来做到这一点。

最佳答案

如果您有多条记录满足您的条件,并且您只想更新其中一条记录,那么您显然没有足够的更新条件。这不是代码问题,而是设计问题...您需要选择如何从当前选择的众多记录中选择要更新的一条记录。那么你想如何选择要更新的记录呢?

如果您的答案是这确实不重要,您可以在标识列上使用聚合函数作为约束,例如:

WHERE ... AND Vagas = (SELECT MIN(Vagas) FROM VAGAS WHERE ...)

请注意“...”代表您已经在使用的条件。我的代码片段只是选择 Vagas 值最低的 VAGAS 记录(通过 select 子查询)。

关于java - 如何猜测或确定 SQL 标识字段并避免重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16636343/

相关文章:

java - 使用 Spring Boot 生成 jar

java - GridBagLayout .NET WinForms

Java new Date() 打印

java - UPSERT 查询给出 ORA 缺少表达式异常

java - JPQL 从 POJO 中的字符串列表中选择不同的字符串

mysql - 为什么这些字符串在 MySQL 中不等效,但在 SQL Server 中等效?

sql - 为每个组选择前 (N) 行

java - 为什么你可以在不进行类型转换的情况下将 long 存储到 float 中

SQL注入(inject)查询

sql - 没有子查询,一个表的两个 "where"语句不起作用