mysql连接行只有1个id

时间:2018-02-19 15:06:12

标签: mysql join

我正在尝试查询两个表以创建每月员工时间报告。当我使用INNER JOIN加入表时(emp_nr在两个表中都是相同的)然后我得到以下内容。如果格式不正确,请原谅。

表员工

id | emp_nr | name | vorname | address | city .....bla bla bla

表zeit(szeit和ezeit是日期时间Y-m-d H:i:s)

id | emp_nr | szeit | ezeit |

我的查询

$result = mysqli_query($conn,"
SELECT e.vorname
     , e.name
     , e.emp_nr
     , a.szeit
     , a.ezeit
  FROM employee e
  JOIN zeit a
 WHERE a.szeit BETWEEN '$jahr-$monat-01' AND '$jahr-$monat-01' + INTERVAL 1 MONTH - INTERVAL 1 DAY
   AND e.emp_nr = 57
 ORDER 
    BY e.emp_nr
     , a.szeit
");

我的结果如下:在这里,我只获得名称和emp_nr的所有员工的所有行

Juli    Zimmerm 57  2018-02-01 09:45:37 2018-02-01 14:15:08
Juli    Zimmerm 57  2018-02-01 18:00:00 2018-02-01 22:30:00
Juli    Zimmerm 57  2018-02-01 19:33:00 2018-02-01 19:44:00
Juli    Zimmerm 57  2018-02-02 10:31:25 2018-02-02 14:30:25

我改变时的代码     在e.emp_nr = 57 至     在a.emp_nr = 57 我得到以下结果。

每个人都单独列出,但所有时间都相同,并且请求的emp_nr不存在。

Frank   Cas 01  2018-02-01 19:33:00 2018-02-01 19:44:00
Julie   Cas 03  2018-02-01 19:33:00 2018-02-01 19:44:00
Lisa    Ket 15  2018-02-01 19:33:00 2018-02-01 19:44:00
Anja    Fis 22  2018-02-01 19:33:00 2018-02-01 19:44:00

我想要的是一份报告,其中只有正确的ID 出现了正确的名字。

用于最简单的SELECT

SELECT emp_nr, szeit, ezeit 
FROM zeit 
WHERE szeit BETWEEN '2018-02-01' AND '2018-02-01' + 
    INTERVAL 1 MONTH - INTERVAL 1 DAY
    AND emp_nr = 57

结果是没有表员工的相应名称

57 2018-02-01 19:33:00 2018-02-01 19:44:00

1 个答案:

答案 0 :(得分:0)

使用JOINS时,您需要使用ON子句指定2个表之间的关系

SELECT e.vorname, e.name, e.emp_nr, a.szeit, a.ezeit
FROM zeit a 
JOIN employee e ON a.emp_nr = e.emp_nr
WHERE a.szeit BETWEEN '2018-02-01' AND '2018-02-01' + 
INTERVAL 1 MONTH - INTERVAL 1 DAY
AND e.emp_nr = 57
ORDER BY e.emp_nr, a.szeit