Ich arbeite mit PostgreSQL. Ich habe einen Tisch mit einigen Elementen. In der letzten Spalte steht "Y" oder "N". Ich brauche einen Befehl, der nur die erste Übereinstimmung auswählt (ich meine, wo die letzte Spalte 'N' ist) und sie auf 'Y' ändern.
Meine Idee:
%Vor%Aber es ändert in jeder Reihe "N" in "Y".
Andere haben das wie beantwortet, aber Sie müssen wirklich verstehen, warum das falsch war:
%Vor%SQL evaluiert Schritt für Schritt in einer wohldefinierten Reihenfolge. In diesem Fall wird die Unterabfrage zuerst ausgewertet, weil sie unkorreliert ist , d. H. Sie bezieht sich nicht auf Variablen aus der äußeren Abfrage.
Die Unterabfrage findet die erste Zeile in id
order, wobei 'Checked' 'N' ist. Da die SELECT-Liste das Feld Checked
enthält, wird die Unterabfrage durch den Wert N
ersetzt. Effektiv tut es nichts (außer es könnte NULL
statt N
sein, wenn keine Zeilen übereinstimmen).
So, jetzt haben Sie:
%Vor%Beginnen zu sehen, was schief gelaufen ist?
'N' = 'N'
wird immer wahr sein. Also ist die WHERE
-Klausel immer wahr, und Sie hätten genauso gut eine unbeschränkte Aktualisierung schreiben können.
Sie versuchen, die erste Zeile zu finden, in der checked
ist n
und checked
auf y
setzen. Sie müssen diese beiden Teile mithilfe des Primärschlüssels verbinden . Suchen Sie die id
, die Sie aktualisieren möchten, und verwenden Sie diese, um die Aktualisierung einzuschränken.
Andere haben den Text dieser Abfrage bereits geschrieben, daher werde ich ihn hier nicht wiederholen. Hoffentlich verstehen Sie jetzt diese Antworten jedoch.
Tags und Links sql postgresql