Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 3个表的内部联接查询_Mysql_Join - Fatal编程技术网

Mysql 3个表的内部联接查询

Mysql 3个表的内部联接查询,mysql,join,Mysql,Join,我不知道这里怎么了。我正在运行一个包含3个表的多重联接的查询,下面的查询非常有效。。。 给我员工的详细信息,他的年龄,如果他需要证书,给我关于证书到期日期的信息,如果不需要证书,也在下一个字段中加上“-”,就像我说的,这就像一个符咒 SELECT `employee`.*, date_format(now(), '%Y') - date_format(`empl_dob`, '%Y') - (date_format(now(), '00-%m-%d') &

我不知道这里怎么了。我正在运行一个包含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'
选择
`员工`.*,
日期格式(now(),“%Y”)-日期格式(`emp\u dob`,“%Y”)-
(日期格式(now(),'00-%m-%d')<日期格式('emp\u dob','00-%m-%d'))作为年龄,
`certs`.`cert\u medical\u restrict`,
如果(`jobtitle`.`jt_medical`='n/a',`jobtitle`.`jt_medical`,
如果(`certs`.`cert\u medical`=0,'No cert',
如果((DATEDIFF((DATE\u ADD(`certs`.`cert\u medical`,INTERVAL 365天)),CURDATE())<1,'X',则,
如果((DATEDIFF((DATE_ADD(`certs`.`cert_medical`,INTERVAL 365天)),CURDATE())<30,'ES','ok'))
)作为医生,,
如果(`jobtitle`.`jt_medical`='n/a','-',
如果(`certs`.`cert\u medical`=0,'-',(DATEDIFF(`DATE\u ADD(`certs`.`cert\u medical`,间隔365天)),CURDATE())作为medicalx
从'employee'开始
加入'jobtitle'
在'employee`.'jobtitle\u id`='jobtitle`.'jobtitle\u id`上
加入'certs'
在'certs'上。'employee\u idno`='employee`.'employee\u idno`
其中`employee`.`employee_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'
选择
`员工`.*,
日期格式(now(),“%Y”)-日期格式(`emp\u dob`,“%Y”)-
(日期格式(now(),'00-%m-%d')<日期格式('emp\u dob','00-%m-%d'))作为年龄,
`certs`.`cert\u medical\u restrict`,
如果(`jobtitle`.`jt_medical`='n/a',`jobtitle`.`jt_medical`,
如果(`certs`.`cert\u medical`=0,`No cert',(日期添加(`certs`.`cert\u medical`,间隔365天)))为医疗,
如果(`jobtitle`.`jt_medical`='n/a','-',
如果(`certs`.`cert\u medical`=0,'-',(DATEDIFF(`DATE\u ADD(`certs`.`cert\u medical`,间隔365天)),CURDATE())作为medicalx
从'employee'开始
加入'jobtitle'
在'employee`.'jobtitle\u id`='jobtitle`.'jobtitle\u id`上
加入'certs'
在'certs'上。'employee\u idno`='employee`.'employee\u idno`
其中`employee`.`employee_no`='10517602'
现在我得到了这个错误“非法混合排序规则(拉丁文1_瑞典语ci,隐式)和(utf8mb4_通用ci,强制)操作'if'” 我想不通,我已经检查过这三张表是否不同,但都设置为“拉丁语-瑞典语-ci”


我做错了什么?任何帮助都将不胜感激-thanx

IMPLICIT
是关于inSQL字符串的,而不是关于一些数据库字段。
在任何地方使用
utf8
都可以解决所有这些问题


阅读有关此问题的文章。

请给出
表结构
IMPLICIT
是关于inSQL字符串,而不是一些数据库字段。在任何地方使用
utf8
都可以解决所有这些问题。请阅读本文。