2014-11-13 2 views
1

여기에 무슨 문제가 있는지 알 수 없습니다. 3 테이블의 다중 조인을 사용하여 쿼리를 실행 중입니다. 아래 쿼리는 완벽하게 작동합니다. 직원 세부 정보, 나이, 인증서가 필요하며 나에게 인증서 만료 날짜와 관련된 정보를 제공하면 나에게도 " - "다음 필드에 인증서가 필요하지 않은 경우 - 내가 말했듯이,이 3 테이블에 대한 내부 조인 쿼리

SELECT 
    `employee`.*, 
    date_format(now(), '%Y') - date_format(`empl_dob`, '%Y') - 
     (date_format(now(), '00-%m-%d') < date_format(`empl_dob`, '00-%m-%d')) AS age, 
    `certs`.`cert_medical_restrict`, 
    IF(`jobtitle`.`jt_medical`='n/a', `jobtitle`.`jt_medical`, 
     IF(`certs`.`cert_medical` = 0, 'No Cert', 
      IF((DATEDIFF((DATE_ADD(`certs`.`cert_medical`, INTERVAL 365 DAY)),CURDATE())) < 1, 'X', 
       IF((DATEDIFF((DATE_ADD(`certs`.`cert_medical`, INTERVAL 365 DAY)),CURDATE())) < 30, 'ES', 'ok'))) 
     ) AS medical,  
    IF(`jobtitle`.`jt_medical`='n/a', '-', 
     IF(`certs`.`cert_medical` = 0, '-', (DATEDIFF((DATE_ADD(`certs`.`cert_medical`, INTERVAL 365 DAY)),CURDATE())))) AS medicalx 
    FROM `employee` 
    JOIN `jobtitle` 
    ON `employee`.`jobtitle_id` = `jobtitle`.`jobtitle_id` 
    JOIN `certs` 
    ON `certs`.`empl_idno` = `employee`.`empl_idno` 
    WHERE `employee`.`empl_no` = '10517602' 

는 ...하지만 내 다음 질의, 나는 실제 유효 기간을 표시해야 ... 마법처럼 작동합니다 collatio의 인증서, 쿼리가
SELECT 
    `employee`.*, 
    date_format(now(), '%Y') - date_format(`empl_dob`, '%Y') - 
     (date_format(now(), '00-%m-%d') < date_format(`empl_dob`, '00-%m-%d')) AS age, 
    `certs`.`cert_medical_restrict`, 
    IF(`jobtitle`.`jt_medical`='n/a', `jobtitle`.`jt_medical`, 
     IF(`certs`.`cert_medical` = 0, 'No Cert', (DATE_ADD(`certs`.`cert_medical`, INTERVAL 365 DAY)))) AS medical,  
    IF(`jobtitle`.`jt_medical`='n/a', '-', 
     IF(`certs`.`cert_medical` = 0, '-', (DATEDIFF((DATE_ADD(`certs`.`cert_medical`, INTERVAL 365 DAY)),CURDATE())))) AS medicalx 
    FROM `employee` 
    JOIN `jobtitle` 
    ON `employee`.`jobtitle_id` = `jobtitle`.`jobtitle_id` 
    JOIN `certs` 
    ON `certs`.`empl_idno` = `employee`.`empl_idno` 
    WHERE `employee`.`empl_no` = '10517602' 

지금 나는이 오류가 ... 매우 거의 같은,하지만하지 않고 문 IF 여분 보면 "잘못된 혼합 나는 그 주위에 머리를 얻을 수 없다. 세 개의 테이블이 서로 다르지만 모두 "latin_swedish_ci"로 설정되어 있는지 확인했다.

(nt (latin1_swedish_ci, IMPLICIT))

여기서 내가 뭘 잘못하고 있니? 어떤 도움을 주시면 감사하겠습니다 - 고맙습니다.

+0

'테이블 구조 '를주십시오. –

+0

'IMPLICIT'은 일부 데이터베이스 필드가 아닌 inSQL 문자열에 관한 것입니다. 모든 곳에서'utf8'을 사용하면이 모든 문제를 해결할 수 있습니다 .. –

+0

[이] (http://airbladesoftware.com/notes/fixing-mysql-illegal-mix-of-collations/) 기사도 읽으십시오. –

답변

0

IMPLICIT은 약 일부 데이터베이스 필드가 아니라 inSQL 문자열에 관한 것입니다. utf8 사방이 모든 문제를 해결해야 사용
..이 문제에 대한

읽기 this 기사.