2013-01-09 106 views
0

我在實時數據庫,由於目前條件下工作,不能沒有放在現場測試查詢...糟糕,我知道...UPDATE查詢,LIMIT和返回順序

基本上它的簡單更新但我只希望它更新最新匹配的行:

UPDATE person SET name = 'bob' WHERE cousin = 'jane' ORDER BY id DESC 
LIMIT 1 RETURNING id 

基本上,許多「人」可以有簡的表哥,我只是想設置的最近的人給Bob的名字。我只是不確定LIMIT和RETURNING子句。他們是否按正確的順序?或者你甚至可以一起使用LIMIT和RETURNING?

begin; 

UPDATE person 
SET name = 'bob' 
WHERE id = (
    select max(id) 
    from person 
    where cousin = 'jane' 
    ) 
RETURNING id; 

現在選擇的結果:

+0

請定義「最近的人」 – wildplasser

+1

即使您需要在生產中測試,也可以將實驗包裝在'BEGIN' ...'ROLLBACK'中。 –

回答

2
UPDATE person 
SET name = 'bob' 
WHERE id = (
    select max(id) 
    from person 
    where cousin = 'jane' 
    ) 
RETURNING id; 

您可以先啓動事務測試

select * 
from person 
where id = id_returned_in_the_above_query; 

如果它是正確的,那麼承諾:

commit; 

否則回滾:

rollback;