MySQL 连接 - 表 A 的所有行都应与表 B 的每一行连接

莫希丁·本·穆罕默德

我希望表 A 的所有行都应与表 B 连接。

表 A - 日历

id date
1  2019-08-01
2  2019-08-02
3  2019-08-03
4  2019-08-04
5  2019-08-05

表 B - 员工出勤

emp_id  attended_date  ispresented
EMP001  2019-08-01     1
EMP001  2019-08-02     1
EMP001  2019-08-03     1
EMP001  2019-08-04     1
EMP002  2019-08-02     1
EMP002  2019-08-03     1
EMP002  2019-08-04     1
EMP002  2019-08-05     1
EMP003  2019-08-01     1
EMP003  2019-08-02     1
EMP003  2019-08-03     1
EMP004  2019-08-03     1
EMP004  2019-08-04     1
EMP004  2019-08-05     1
EMP005  2019-08-01     1
EMP005  2019-08-05     1

这是示例表。在表 1 中,我生成了日期范围

在表 2 中 - 员工如果出勤将有出勤记录。

所以,即使员工没有被打开,我也想约会。

我试过左加入和所有。

join happens based on date if exists on both end.

我想添加不存在的日期,默认情况下保留字段将为空。

预期行应该是:

EMPID   DATE          ispresented
EMP001  2019-08-01     1
EMP001  2019-08-02     1
EMP001  2019-08-03     1
EMP001  2019-08-04     1
EMP001  2019-08-05     0
EMP002  2019-08-01     0
EMP002  2019-08-02     1
EMP002  2019-08-03     1
EMP002  2019-08-04     1
EMP002  2019-08-05     1

等等...

缺口

因为你想获得每个员工每个日期的状态,你需要做的一个CROSS JOIN员工(从选择列表之间Attendance)和时间(从列表中Calendar),然后LEFT JOIN,为了Attendance得到ispresented每个组合:

SELECT E.emp_id,
       C.date,
       COALESCE(A.ispresented, 0) AS ispresented
FROM (SELECT DISTINCT emp_id
      FROM Attendance) E
CROSS JOIN Calendar C
LEFT JOIN Attendance A ON A.emp_id = E.emp_id AND A.attended_date = C.date
ORDER BY emp_id, date

输出:

emp_id  date        ispresented
EMP001  2019-08-01  1
EMP001  2019-08-02  1
EMP001  2019-08-03  1
EMP001  2019-08-04  1
EMP001  2019-08-05  0
EMP002  2019-08-01  0
EMP002  2019-08-02  1
EMP002  2019-08-03  1
EMP002  2019-08-04  1
EMP002  2019-08-05  1
EMP003  2019-08-01  1
EMP003  2019-08-02  1
EMP003  2019-08-03  1
EMP003  2019-08-04  0
EMP003  2019-08-05  0
EMP004  2019-08-01  0
EMP004  2019-08-02  0
EMP004  2019-08-03  1
EMP004  2019-08-04  1
EMP004  2019-08-05  1
EMP005  2019-08-01  1
EMP005  2019-08-02  0
EMP005  2019-08-03  0
EMP005  2019-08-04  0
EMP005  2019-08-05  1

dbfiddle 上的演示

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将表 A 的第一行与表 B 的第一行连接起来,没有公共标识符(对于所有行)。mysql

来自分类Dev

MySQL连接表结果为一行

来自分类Dev

连接多个表并汇总第一个表中每一行的结果

来自分类Dev

将表 1 的每一行连接到表 2

来自分类Dev

MySQL:将具有多个结果行的表连接到一行

来自分类Dev

选择连接表中的字段在每一行中都相同的行

来自分类Dev

连接2个表后如何为每一行选择一个值

来自分类Dev

表视图控制器的每一行都连接到不同的视图控制器

来自分类Dev

获取主表中每一行的每个连接表的行数

来自分类Dev

MySQL连接表并计数行

来自分类Dev

MySQL表与Python连接

来自分类Dev

mysql连接表

来自分类Dev

在MySQL中连接表

来自分类Dev

MySQL表与Python连接

来自分类Dev

MySQL 表连接多值

来自分类Dev

多次将表 A 连接到表 B

来自分类Dev

将一个mysql表中的一行连接到第二个表中的多行

来自分类Dev

MySQL将每一行连接到除自身之外的每一行

来自分类Dev

MySQL,使用in子句连接表来连接

来自分类Dev

MySQL连接同时依靠连接表

来自分类Dev

SQL从表中选择所有连接的行都与值匹配的行

来自分类Dev

连接4个MySQL表

来自分类Dev

连接4个表mySQL

来自分类Dev

MySQL连接表的WHERE子句

来自分类Dev

连接3个表MySQL

来自分类Dev

MYSQL QUERY连接多个表

来自分类Dev

MySQL连接4个表

来自分类Dev

MYSQL多重连接与参考表

来自分类Dev

MySQL事件与表之间的连接