如何使用 DB2 sql 检查不在两个表中的记录以获取另一个第三个表中的日期?
Posted
技术标签:
【中文标题】如何使用 DB2 sql 检查不在两个表中的记录以获取另一个第三个表中的日期?【英文标题】:How to check records not in two tables for a date in another third table using DB2 sql? 【发布时间】:2021-08-16 09:58:52 【问题描述】:我有一个 Employee 表,其中包含带有 ID 的员工姓名列表,它们由此流向具有以下结构的两个表:
EMP 表
ID | EMP_NAME |
---|---|
100 | BOB |
create table EMP (ID varchar(20),EMP_NAME varchar(20));
insert into EMP values('100','BOB')
表 1
ID | NAME | DATE |
---|---|---|
100 | BOB | 01-10-2021 |
100 | BOB | 01-11-2021 |
create table Table_1(ID varchar(20),NAME varchar(20), DATE date);
insert into Table_1 values('100','BOB','01-10-2021');insert into Table_1 values('100','BOB','01-11-2021');
表 2
ID | NAME | DATE |
---|---|---|
100 | BOB | 01-11-2021 |
100 | BOB | 01-12-2021 |
create table Table_2(ID varchar(20),NAME varchar(20), DATE date);
insert into Table_2 values('100','BOB','01-11-2021');insert into Table_1 values('100','BOB','01-12-2021');
餐桌日期
Month | DATE |
---|---|
Sep | 01-09-2021 |
Oct | 01-10-2021 |
Nov | 01-11-2021 |
Dec | 01-12-2021 |
create table DATE(Month varchar(20), DATE date);
insert into DATE values('Sep','01-09-2021');insert into DATE values('Sep','01-10-2021');insert into DATE values('Sep','01-11-2021'); insert into DATE values('Sep','01-12-2021'))
我想参考表 3(日期表)来确定表 3 记录的哪个日期没有出现在表 1 和表 2 中(在给定的情况下,日期 = 01-09-2021 的记录是预期的输出)
预期输出
ID | NAME | DATE |
---|---|---|
100 | BOB | 01-09-2021 |
【问题讨论】:
【参考方案1】:我想参考表表3(日期表)来确定表3记录的哪个日期没有出现在表1和表2中
如果您只想要不出现的整体日期,可以使用not exists
或left join
:
select d.*
from dates d
where not exists (select 1 from table1 t1 where t1.date = d.date) and
not exists (select 1 from table2 t2 where t2.date = d.date);
这是您提出的问题。但是,您想要的结果表明您想要不出现的员工/日期组合。如果是这种情况,那么 CROSS JOIN
emp
和 dates
表并过滤掉不存在的表。一种方法:
select e.*, d.*
from emp e cross join
dates d left join
table1 t1
on t1.date = d.date and t1.id = e.id left join
table2 t2
on t2.date = d.date and t2.id = e.id
where t1.id is null and t2.id is null;
【讨论】:
【参考方案2】:试试这个:
SELECT E.ID, E.EMP_NAME, D.DATE
FROM DATE D, EMP E
WHERE
NOT EXISTS (SELECT 1 FROM Table_1 T WHERE T.ID = E.ID AND T.DATE = D.DATE)
AND NOT EXISTS (SELECT 1 FROM Table_2 T WHERE T.ID = E.ID AND T.DATE = D.DATE)
【讨论】:
以上是关于如何使用 DB2 sql 检查不在两个表中的记录以获取另一个第三个表中的日期?的主要内容,如果未能解决你的问题,请参考以下文章
我想使用 SQL for DB2 z/OS v9 计算模式中所有表中的记录