2012-03-24 2 views
0

두 개의 쿼리가 있습니다. 또 다른 하나는 mysql 쿼리에 매우 이상한 동작이 있습니다.

INSERT INTO balik 
    (balik_date, 
     balik_time, 
     balik_cardID, 
     balik_status, 
     balik_type) 
    select 
     current_date(), 
     '00:00:00', 
     L_CardID, 
     'BELUM BALIK', 
     L_Type 
     FROM 
     logdetail t1 
      LEFT JOIN balik t2 
       ON t1.L_CardID = t2.balik_cardID 
     WHERE 
      t1.L_Type = 'IN' 
     and t1.L_Date = current_date() 
     AND t2.balik_cardID IS NULL" 

첫 번째는 ... ..

UPDATE balik blk 
    INNER JOIN logdetail ld 
     ON blk.balik_cardID = ld.L_CardID 
    and blk.balik_date = current_date() 
    SET 
     blk.balik_status = 'SUDAH BALIK', 
     blk.balik_type = 'OUT', 
     blk.balik_time = ld.L_Time 
    WHERE 
      ld.L_Type = 'OUT' 
     and ld.L_Date = current_date() 

내 문제는 내가 실행할 때, 제 1 및 제 2 질의 아무것도 내가 모든 기록을 삭제하지 않는 일이 없다는 것입니다 내 테이블을 미리. 이 경우 두 가지 쿼리가 모두 실행되고 매력처럼 작동합니다.

왜 이런 일이 발생합니까?

+0

이미 내 소식을 업데이트했습니다! –

+2

고유 한 컬럼이 있습니까? 그것은 왜 이것이 단지 한 번 작동하는지 설명 할 것입니다. –

+0

발리크 (balik_date, balik_time, balik_cardID)에있는 내 PK 및 테이블 logdetail (L_Date, L_Time, L_CardID) 내 PK ... 답장을 주셔서 감사합니다. –

답변

0

내가 기억하는 바로는 당신이 삽입 한 것의 영향을 줄 수있는 쿼리의 결과 인 테이블에 삽입을 할 수 없다는 것입니다 ... 그래서 선택이 "래핑 된 경우 도움이 될 수도 있습니다 "내부의 쿼리가 완전히 처리되어 처음부터 삽입에 영향을받지 않도록 다른 레이어 내부에 삽입해야합니다.

INSERT INTO balik 
    (balik_date, 
     balik_time, 
     balik_cardID, 
     balik_status, 
     balik_type) 
    select 
     PreQuery.newDate, 
     PreQuery.newTime, 
     PreQuery.newCardID, 
     PreQuery.newStatus, 
     PreQuery.newType 
     from 
     (select 
       current_date() newDate, 
       '00:00:00'  newTime, 
       L_CardID  newCardID, 
       'BELUM BALIK' newStatus, 
       L_Type   newType 
       FROM 
       logdetail t1 
        LEFT JOIN balik t2 
         ON t1.L_CardID = t2.balik_cardID 
       WHERE 
        t1.L_Type = 'IN' 
       and t1.L_Date = current_date() 
       AND t2.balik_cardID IS NULL") PreQuery 

나는 다음 WHERE 절

UPDATE balik blk, logdetail ld 
    SET 
     blk.balik_status = 'SUDAH BALIK', 
     blk.balik_type = 'OUT', 
     blk.balik_time = ld.L_Time 
    WHERE 
     blk.balik_cardID = ld.L_CardID 
    and blk.balik_date = current_date() 
    and ld.L_Type = 'OUT' 
    and ld.L_Date = current_date() 

에 조인 조건을 적용, 쉼표로 구분 된 테이블을 나열 ... 더 가깝게 문서 당 SQL 구문의 일치하도록 업데이트에 대한 구문을 변경하는 것 네, 근본적으로 같은 것 같지만 해석 문제 일 수 있습니다.

+0

안녕하세요 @ DRapp ... 정말 고마워요. 당신에게 빚진 ... 감사합니다. 음 ... 쿼리가 잘 작동합니다! :) –

+0

@ApizZest, 당신은 환영합니다 ... 오늘까지, 나는 여전히 너무 배우고 있습니다. – DRapp

관련 문제