2012-04-06 109 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