0

データの重複更新を避けたいので、次の行のデータを更新せずに 1 つの行フィールドのみを更新する方法があるかどうかを知りたいです。これがシナリオです。次のコードがあります。

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 を意味します)を更新したいと思います。ここで、コース ( Curso) はcombocurso.getSelectedItem().toString()コンボボックスに等しく、 turma(コースのクラスルームが既に満たされたグループを意味する) はcombocurso.getSelectedItem().toString()コンボボックスに等しくなります。

1 つの問題を除いて、すべて正常に更新されます。たとえば、2 つの教室の空席を表すMatricula同じ名前 ( ) の行があります。1ACC更新を呼び出すと、両方のMatricula空席を埋めたいので望ましくない番号で埋められますが、両方とも同じ名前であるため、両方が埋められます。

Vagasそのため、(テーブル名ではなく列名) という名前の最初のフィールド (列)があり、これはint identity (1,1)フィールドであり、更新コマンドを呼び出すときに 1 つのフィールドのみを入力したいと考えています。コラムと比較してそれをやろうとしていましたが、Vagasそれを行う方法が見つからないようです。

4

1 に答える 1

1

基準を満たす複数のレコードがあり、それらのレコードの 1 つだけを更新したい場合は、更新の基準が明らかに不十分です。これはコードの問題ではなく、設計上の問題です...現在選択している多数のレコードから更新する 1 つのレコードを選択する方法を選択する必要があります。更新するレコードをどのように選択しますか?

本当に問題ではないという答えが得られた場合は、ID 列で集計関数を制約として使用できます。次に例を示します。

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

「...」は、すでに使用している条件を表すことに注意してください。私のコード スニペットは、最も低い Vagas 値を持つ VAGAS レコードを選択するだけです (select サブクエリを介して)。

于 2013-05-19T15:44:02.407 に答える