2012-06-21 6 views
1

나는 노력하고있어 다음과 어떤 문제가 있는지 알 수 없습니다select 문과 함께 ifnull을 사용할 수 있습니까?

IF(IFNULL(
     SELECT * FROM vertreter AS ag 
     WHERE ag.iln = param_loginID 
     AND ag.verkaeufer = param_sellerILN 
    ), 
     UPDATE vertreter AS agUp 
     SET agUp.vertreterkennzeichen 
     WHERE agUp.iln = param_loginID AND agUp.verkaeufer = param_sellerILN 
     , 
     INSERT INTO vertreter AS agIn 
      (agIn.iln, agIn.verkaeufer, agIn.vertreterkennzeichen, agIn.`status`) 
     VALUES 
      (param_loginID, param_sellerILN, param_agentID, 'Angefragt') 
    ); 

질문 :
는 SELECT가 NULL을 반환 여부를 확인하기 위해, 모든이 가능하고 A 또는 B가 따라합니까?

+2

'IFNULL' 만 열이 아닌 행을 사용할 수 있습니다. 달성하고자하는 것은 무엇입니까? 추신 : 삽입과 업데이 트를 섞어 하나의 쿼리에서 선택하실 수 없습니다 – zerkms

+0

그 달성하기 위해 저장 프로 시저가 필요할 수 있습니다 – codingbiz

+0

@zerkms : 항목이 "vertreter"테이블에 있는지 확인해야합니다. 그렇다면 엔트리를 업데이트해야합니다. , 그렇지 않다면, 나는 새로운 항목을 만들어야합니다. 위는 이미 저장된 proc 안에 있습니다. 그냥 작동시킬 수 없습니다. 도와 주셔서 감사합니다! – frequent

답변

1

고유 한 복합 색인 (iln + verkaeufer)을 만들어야합니다.

http://dev.mysql.com/doc/refman/5.0/en/create-index.html

CREATE UNIQUE INDEX vertreter_iln_verkaeufer ON vertreter (iln, verkaeufer) 

그리고 당신이 한 쿼리에서이 작업을 수행 할 수 있습니다

INSERT INTO vertreter 
(agIn.iln, agIn.verkaeufer, agIn.vertreterkennzeichen, agIn.`status`) 
VALUES (param_loginID, param_sellerILN, param_agentID, 'Angefragt') 
ON DUPLICATE KEY UPDATE vertreterkennzeichen = param_agentID 

문서 : http://dev.mysql.com/doc/refman/5.5/en/insert-on-duplicate.html

+0

소리가 좋습니다. 전에는 머리를 쓰지 마. 삽입하고 일치하는 레코드가 있으면 업데이트 만하고 있습니까? – frequent

+1

@frequent : 예, "일치하는 레코드"는 고유 색인 중복으로 식별되므로 작성하는 것을 잊지 마십시오 (내 대답의 첫 줄에 언급 했음) – zerkms

+0

나는 분실했습니다. 고유 한 복합 색인은 어떻게 선언합니까? "iln"은 고유 한 값이지만 어디에 선언해야합니까? – frequent