2012-04-06 3 views
1

Die folgenden zwei Abfragen zu erreichen, was ich mit meiner Tabellen zu tun:Was ist der beste Weg, um die Update-Abfrage zu schreiben?

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

Ich möchte wissen, was der bessere Weg zu tun, ist, dass in Bezug auf die Optimalität, Sicherheit (Fälle oder Nebenwirkungen) oder Best Practices?

Antwort

0

Die erste Version ist eindeutig nicht Standard-SQL, da mehrere Tabellen vor der SET nicht zulässig sind.

Update person_role_memberships, events SET 

Auch "Optimalität" hängt von dem tatsächlichen Produkt und der Version ab, die Sie verwenden möchten. Aber solange es keinen anderen Grund gibt, würde ich so weit wie möglich mit Standard-SQL gehen.

als eine kleine Idee für eine Verbesserung (dh sollten Sie es testen) können Sie ersetzen die IN Teil mit EXISTS

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

Ich möchte die Update-Abfrage für jeden Datensatz von 'select name von Veranstaltungen, bei denen Datum_2 zurück laufen = curdate() -1' - würde 'exist' das tun? Ich existiere jedoch nur, um zu testen, ob etwas zurückgegeben wurde oder nicht. –

+0

Sie haben richtig gedacht, aber der Test für die Existenz enthält 'person_role_memberships.event_name = event.name'. Es ist das gleiche wie Ihre 'IN' Auswahl. –

+0

Und was macht 'select 1'? –

Verwandte Themen