Я не знаю, что здесь не так. Я выполняю запрос с множественным объединением из 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'
... Но для моего следующего запроса, мне нужно, чтобы отобразить текущую дату истечения срока свидетельства, запросы выглядят почти так же, но без дополнительных IF заявления ...
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'
Теперь я получаю эту ошибку «Illegal смесь collatio ns (latin1_swedish_ci, IMPLICIT) и (utf8mb4_general_ci, COERCIBLE) для операции «if» « Я не могу опустить голову, я проверил, отличаются ли три таблицы друг от друга, но все они установлены на« latin_swedish_ci »
Что я здесь делаю неправильно? Любая помощь была бы оценена - thanx
Пожалуйста, дайте 'table structure' –
' IMPLICIT' о строках inSQL, а не о некоторых полях базы данных. Использование 'utf8' везде должно исправить все эти проблемы. –
прочитайте также статью [this] (http://airbladesoftware.com/notes/fixing-mysql-illegal-mix-of-collations/). –