2012-04-06 111 views
1

以下兩個查詢實現我想要做我的表:寫更新查詢的更好方法是什麼?

Update person_role_memberships, events 
set person_role_id = 2 
where person_role_id = 32 and event_name = events.name and events.date_2 = curdate() - 1 
; 

-

update person_role_memberships set person_role_id = 2 
where person_role_id = 32 and event_name in 
    (select name from events where date_2 = curdate() -1 
    ); 

我想知道這是做的更好的辦法是,在最優,安全性方面(角落案例或副作用)還是最佳實踐?

回答

0

第一個版本顯然不是標準SQL,因爲不允許在SET之前的多個表。

Update person_role_memberships, events SET 

而且「最優」依賴於實際的產品和版本,你打算使用。 但只要沒有其他原因,我會盡可能使用標準SQL。

作爲改進未成年人思想(即你應該測試它),你可以用EXISTS

... and exists(select 1 from events where event_name = event.name and date_2 = curdate() -1) 
+0

我想運行從比賽時,日期2用'選擇名返回的每個記錄更新查詢替代IN部分= curdate()-1' - 會'存在'做到這一點?我雖然存在只是爲了測試是否有返回或沒有。 – 2012-04-06 11:54:28

+0

你認爲正確,但存在的測試包括'person_role_memberships.event_name = event.name'。這和你的'IN'選擇一樣。 – 2012-04-06 11:58:13

+0

「select 1」做什麼? – 2012-04-06 12:08:01