2015-01-15 2 views
0

인터넷을 통해 서핑하고 이에 대한 답변을 찾고 답변을 찾을 수 없습니다.where 절을 사용하여 UPSERT하는 방법

업데이트 또는 삽입하기 전에 4 개의 열을 확인하고 싶습니다. INSERT ...를 사용할 수 없습니다. where 절을 허용하지 않기 때문에 DUPLICATE KEY UPDATE를 사용하십시오. 그래서 저는 저에게 만들어진 다음 문장을 사용하려고했습니다.

"SELECT COUNT(id) INTO @count FROM room_prices WHERE (hotel_di = $hotel_id AND room_id = $room_id AND period_id = $periodId AND meal_plan_id = $mealPlanId) " 
       . "IF @count > 0 THEN " 
       . "UPDATE room_prices SET price = $price WHERE (hotel_di = $hotel_id AND room_id = $room_id AND period_id = $periodId AND meal_plan_id = $mealPlanId) " 
       . "ELSE " 
       . "INSERT INTO room_prices (hotel_id, room_id, period_id, meal_plan_id, price) VALUES ($hotel_id, $room_id, $periodId, $mealPlanId, $price) " 
       . "END IF" 

그러나 이것도 작동하지 않습니다. 이 오류가 발생합니다.

제출하신 질문이 유효하지 않습니다.

이 작업을 수행하는 방법은 무엇입니까? hotel_id에 고유 인덱스, room_id, period_id, meal_plan_id

답변

1

시작 :

CREATE UNIQUE INDEX idx_room_prices_4 on room_prices(hotel_id, room_id, period_id, meal_plan_id) 

그런 다음 당신이 사용할 수있는 on duplicate key update :

INSERT INTO room_prices(hotel_id, room_id, period_id, meal_plan_id, price) 
    SELECT $hotel_id, $room_id, $periodId, $mealPlanId, $price 
    ON DUPLICATE KEY UPDATE price = $price; 
+0

확인 나는 .. 그 전에 내가에 요구하고있다을 다할 것입니다 확실히해라. price 열을 업데이트하기 전에 hotel_id, room_id, period_id, meal_plan_id 열을 모두 확인합니까? – Yasitha

+1

@ 야시 타. . . 예, 네 개의 열에 고유 색인이있는 경우 –

+0

내 경우 hotel_id의 room_id 인 meal_plan_id는이 테이블의 고유 필드가 아닙니다. 그래서 이것은 나를 위해 일하지 않을 것입니다. – Yasitha

관련 문제