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

SET 이전의 여러 테이블을 사용할 수 없으므로 첫 번째 버전은 분명히 표준 SQL이 아닙니다.

Update person_role_memberships, events SET 

또한 "최적"은 사용하려는 실제 제품 및 버전에 따라 다릅니다. 하지만 다른 이유가없는 한 가능한 한 표준 SQL을 사용합니다.

개선을위한 작은 아이디어 (즉, 당신이 그것을 테스트해야합니다) 당신은 내가 이벤트 곳 날짜 2에서 선택 이름`에 의해 반환 된 모든 레코드에 대한 업데이트 쿼리를 실행하려면 EXISTS

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

으로 IN 부분을 대체 할 수 있습니다로 = curdate() -1' -'존재합니까'할까요? 나는 아무것도 반환되었는지 여부를 테스트하는 것만으로도 존재합니다. –

+0

당신은 옳다고 생각했지만 존재 테스트에는'person_role_memberships.event_name = event.name'이 포함되어 있습니다. 'IN' 선택과 같습니다. –

+0

그리고'select 1'은 무엇을합니까? –

관련 문제