2016-05-30 9 views
1

zu wissen, ich habe diese Anfrage:ein Update durchführen, ohne die ID

UPDATE PEOPLE SET ID_STATE = 5 WHERE ID_STATE IN (3,4); 

Ich würde die gleiche Anfrage machen, aber wenn ich die ID_STATE nicht wissen, sondern nur das labelStatePeople

SELECT ID_STATE FROM STATE_PEOPLE WHERE labelStatePeople = 'blue'; 

BEISPIEL :

$1 = SELECT ID_STATE FROM STATE_PEOPLE WHERE labelStatePeople = 'blue'; 
$2 = SELECT ID_STATE FROM STATE_PEOPLE WHERE labelStatePeople = 'yellow'; 
$3 = SELECT ID_STATE FROM STATE_PEOPLE WHERE labelStatePeople = 'red'; 

letzte Anfrage:UPDATE PEOPLE SET ID_STATE = $1 WHERE ID_STATE IN ($2,$3);

Antwort

4

einfach eine Unterabfrage, die diese seltsamen Menschen ID_STATE Werte zurückgibt:

UPDATE PEOPLE 
    SET ID_STATE = 5 
WHERE ID_STATE IN (SELECT ID_STATE FROM STATE_PEOPLE 
        WHERE labelStatePeople = 'strange' 
        and ID_STATE IS NOT NULL) 

(Die ID_STATE IS NOT NULL Teil der Unterabfrage kann entfernt werden, wenn diese Spalte NOT NULL ist .)

+0

Ich habe meinen Beitrag aktualisiert, um ein besseres Verständnis für mein Problem zu bekommen – Mercer

+0

Aus Neugier, ist das 'IS NOT NULL' aus Leistungsgründen erforderlich? (Angenommen, die Spalte kann NULL sein) – kamilk

+0

@kamilk, nein, der Grund dafür ist, dass wenn die Sub-Qeury einen NULL zurückgibt, die WHERE-Klausel falsch ist, und überhaupt keine Zeilen aktualisiert werden - auch wenn die Sub-Qeury auch Gibt gültige ID_STATE-Werte zurück. (Sehr häufiger Fehler.) – jarlh

1

versuchen Sie dies

UPDATE PEOPLE 
SET ID_STATE = 5 
WHERE ID_STATE 
IN (SELECT ID_STATE FROM STATE_PEOPLE 
WHERE labelStatePeople 
IN ('blue','yellow','red') 
AND ID_STATE IS NOT NULL); 
Verwandte Themen