Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.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不工作_Mysql_Sql - Fatal编程技术网

左连接和多个条件mysql不工作

左连接和多个条件mysql不工作,mysql,sql,Mysql,Sql,我对mysql中的sql查询有问题 SELECT g.PROFILE_INFO_ID,g.ADDRESS, g.DATE_NAISS,g.CIN,g.PRENOM, g.NOM,g.MLE_C,g.BADGE_ID, g.GRADE_ID,g.SECTION_ID, g.SERVICE_ID,lp.id_pointage, lp.autorisation,lp.date_p_in, lp.date_p_out,lp.image_p_in, lp.image_p_out,lp.UNITE, lp.

我对mysql中的sql查询有问题

SELECT
g.PROFILE_INFO_ID,g.ADDRESS,
g.DATE_NAISS,g.CIN,g.PRENOM,
g.NOM,g.MLE_C,g.BADGE_ID,
g.GRADE_ID,g.SECTION_ID,
g.SERVICE_ID,lp.id_pointage,
lp.autorisation,lp.date_p_in,
lp.date_p_out,lp.image_p_in,
lp.image_p_out,lp.UNITE,
lp.ID_BADGE,lp.UNITE_ID
FROM
profile_info AS g
LEFT JOIN last_pointage AS lp ON g.BADGE_ID = lp.ID_BADGE
WHERE 
DATE_FORMAT((lp.date_p_in), '%d-%m-%Y') LIKE DATE_FORMAT((NOW()), '%d-%m-%Y')
AND (
g.SECTION_ID = (SELECT SECTION_ID from section WHERE section.SECTION_NAME like 'TOPO') and
g.SERVICE_ID = (SELECT SERVICE_ID from service WHERE service.SERVICE_NAME like 'SIGR')
)
查询结果为:

但是当我删除日期条件时:`Date_格式((lp.Date_p_in),“%d-%m-%Y”)类似于Date_格式((NOW()),“%d-%m-%Y”)

我得到了我想要的,但我想要今天的结果日期:

各表:


除了第一个表之外,在一系列
左连接中,您能帮助所有表的条件都需要进入
on
子句,而不是
where
子句

而且,你的约会算术很糟糕。您应该使用内置的日期/时间函数——这就是它们存在的原因。因此,来自
应该如下所示:

FROM profile_info g LEFT JOIN
     last_pointage lp
     ON g.BADGE_ID = lp.ID_BADGE AND
        lp.date_p_in = curdate()
WHERE . . .

如果
中的
date\u p\u可能有时间组件,请使用
date()
函数。

如果查询的其余部分正在执行您想要的操作,请尝试

SELECT g.PROFILE_INFO_ID,
       g.ADDRESS,
       g.DATE_NAISS,
       g.CIN,
       g.PRENOM,
       g.NOM,
       g.MLE_C,
       g.BADGE_ID,
       g.GRADE_ID,
       g.SECTION_ID,
       g.SERVICE_ID,
       lp.id_pointage,
       lp.autorisation,
       lp.date_p_in,
       lp.date_p_out,
       lp.image_p_in,
       lp.image_p_out,
       lp.UNITE,
       lp.ID_BADGE,
       lp.UNITE_ID
FROM profile_info AS g
LEFT JOIN last_pointage AS lp ON g.BADGE_ID = lp.ID_BADGE
WHERE DATE(lp.date_p_in) = CURDATE()
  AND ( g.SECTION_ID =
         (SELECT SECTION_ID
          FROM SECTION
          WHERE section.SECTION_NAME LIKE 'TOPO')
       AND g.SERVICE_ID =
         (SELECT SERVICE_ID
          FROM service
          WHERE service.SERVICE_NAME LIKE 'SIGR') );
看起来date_p_in列中的日期是一种非常标准的格式,因此一种简单的方法可能是最好的(除非您希望某些日期采用奇怪的格式?)

您也可以按照Gordon的建议将日期条件放入联接中,但是对于日期不是今天的所有行,您可能会在date_p_in列中获得所有具有空值的行。这取决于你需要什么

SELECT g.PROFILE_INFO_ID,
       g.ADDRESS,
       g.DATE_NAISS,
       g.CIN,
       g.PRENOM,
       g.NOM,
       g.MLE_C,
       g.BADGE_ID,
       g.GRADE_ID,
       g.SECTION_ID,
       g.SERVICE_ID,
       lp.id_pointage,
       lp.autorisation,
       lp.date_p_in,
       lp.date_p_out,
       lp.image_p_in,
       lp.image_p_out,
       lp.UNITE,
       lp.ID_BADGE,
       lp.UNITE_ID
FROM profile_info AS g
LEFT JOIN last_pointage AS lp ON g.BADGE_ID = lp.ID_BADGE
WHERE DATE(lp.date_p_in) = CURDATE()
  AND ( g.SECTION_ID =
         (SELECT SECTION_ID
          FROM SECTION
          WHERE section.SECTION_NAME LIKE 'TOPO')
       AND g.SERVICE_ID =
         (SELECT SERVICE_ID
          FROM service
          WHERE service.SERVICE_NAME LIKE 'SIGR') );