2016-05-30 64 views
1

我有這樣的要求:做一個更新不知道ID

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

我會提出同樣的要求,但如果我不知道ID_STATE但只是labelStatePeople

SELECT ID_STATE FROM STATE_PEOPLE WHERE labelStatePeople = 'blue'; 

實例:

$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'; 

最後的請求:UPDATE PEOPLE SET ID_STATE = $1 WHERE ID_STATE IN ($2,$3);

回答

4

只要有一個子查詢,返回那些陌生的人們的ID_STATE值:

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) 

(子查詢的ID_STATE IS NOT NULL部分可以,如果該列是NOT NULL刪除)

+0

我更新了我的文章,以更好地理解我的問題 – Mercer

+0

出於好奇,是否出於性能原因需要「不是NULL」? (假設該列可以爲NULL) – kamilk

+0

@kamilk,不,原因是如果子qeury返回NULL,則WHERE子句將爲false,並且根本不會更新任何行 - 即使子qury也是返回有效的ID_STATE值。 (非常常見的錯誤) – jarlh

1

試試這個

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);