2012-05-12 3 views
1

학교 프로젝트로 테이블 생성기를 사용하고 있습니다. MySQL에는 3 개의 테이블 즉, 프로세스, 작업, 점수가 있습니다. 웹 응용 프로그램의 "열 추가"버튼을 테스트 할 때까지 모든 것이 잘 보였습니다. 이전에 저장된 데이터를 올바르게 읽어야하고 형식의 새 열을 포함해야합니다. 문제는 이전 쿼리 된 데이터에 새 테이블에 대한 값이 포함되어 있지 않으므로 레코드를 찾을 수 없으면 0 점을 반환하고, , 프로세스 ID processName 레코드를 찾을 수 없으면 0을 반환합니다.

  • 운영 - - operationID, operationName을
  • 점수 - scoreID, 점수, 프로세스 ID, operationID, scoreType (

    • 과정 (어쩌면 그냥 잘못을 사용하여 메신저) IFNULL & 유착을 시도했지만 아무 반응이 없습니다 점수 유형은 SELF, GL, FINAL)

      ps = (PreparedStatement) dbconn.prepareStatement ("점수를 얻은 점수 scoreID WHERE processID =? 및 operationID =? ?와 입력 =) "프로세스 id BY ORDER 여기에

    가 작은 샘플 http://i50.tinypic.com/2yv3rf9.jpg

  • 답변

    4
    의 그림입니다

    IFNULL이 작동하지 않는 이유는 단지 값에 영향을 가지고 있다는 것입니다 결과 세트. 행이없는 행은 값이 없으므로 아무것도 수행하지 않습니다.

    우선 클라이언트에서 서버보다 처리하는 것이 좋습니다.하지만 서버에서 수행해야하는 경우에는 몇 가지 방법이 있습니다. 생각해 봐.

    시험해보기 :

    SELECT IFNULL(SUM(score), 0) AS score 
    FROM score 
    WHERE processID=? and operationID=? and type=? 
    ORDER BY processid 
    

    SUM은 정확히 하나의 행이 반환되도록합니다. 당신이 테이블에 여러 일치하는 행을 포함하는 경우 여러 행을 반환해야하는 경우

    당신은 (편의상에 의해 순서를 생략)이 사용할 수 있습니다 :

    SELECT score 
    FROM score 
    WHERE processID = ? and operationID = ? and type = ? 
    
    UNION ALL 
    
    SELECT 0 
    FROM (SELECT 0) T1 
    WHERE NOT EXISTS 
    (
        SELECT * 
        FROM score 
        WHERE processID = ? and operationID = ? and type = ? 
    ) 
    
    +0

    멋진 대답 .. 정말 감상. – Dhruvisha

    +0

    감사합니다. 정확히 무엇이 필요한가요? – JLawrence

    관련 문제