2012-04-06 8 views
1

次の2つのクエリは、私は私のテーブルで何をしたいかを達成:更新クエリを書き込むためのより良い方法は何ですか?

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

SETより前の複数のテーブルが許可されていないため、最初のバージョンは明らかに標準SQLではありません。

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

IN一部を置換してもよい、私はイベント場所日付2から選択名 'によって返されたすべてのレコードに対して更新クエリを実行したいです= curdate()-1'は 'exists'でしょうか?私は何かが返されたかどうかをテストするために存在します。 –

+0

あなたは正しいと思ったが、存在のテストには 'person_role_memberships.event_name = event.name'が含まれています。あなたの 'IN'選択と同じです。 –

+0

「選択1」は何をしますか? –