如何使用 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 existsleft 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 empdates 表并过滤掉不存在的表。一种方法:

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中,如何查询存在一个表而不在另一个表中的数据记录

如何使用 SQL Server 返回不在表中的 id

SQL中,如何查询存在一个表而不在另一个表中的数据记录

我想使用 SQL for DB2 z/OS v9 计算模式中所有表中的记录

DB2 和 SQL-如何在特定字段中返回最大值,以便每行只显示一条记录;从多个表中提取数据

Sql Cleanup 脚本,从一个不在另一个表中的表中删除