如何使用DB2 sql检查不在两个表中的记录,以查找另一个表中的日期?

zi8p0yeb  于 2022-11-07  发布在  DB2
关注(0)|答案(2)|浏览(211)

我有一个Employee表,其中包含带有ID的雇员姓名列表,它们从该表流向具有以下结构的两个表:
EMP表
| 识别码|员工姓名|
| - -|- -|
| 100个|鲍勃|
insert into EMP values('100','BOB')``insert into EMP values('100','BOB')
表一
| 识别码|名称|日期|
| - -|- -|- -|
| 100个|鲍勃|2021年10月1日|
| 100个|鲍勃|2021年11月1日|
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');
表二
| 识别码|名称|日期|
| - -|- -|- -|
| 100个|鲍勃|2021年11月1日|
| 100个|鲍勃|2021年12月1日|
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');
表日期
| 月份|日期|
| - -|- -|
| 九月|2021年9月1日|
| 十月|2021年10月1日|
| 十一月|2021年11月1日|
| 十二月|2021年12月1日|
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中(因为给定病例记录的日期= 2021年9月1日是预期输出)
预期输出
| 识别码|名称|日期|
| - -|- -|- -|
| 100个|鲍勃|2021年9月1日|

velaa5lx

velaa5lx1#

我想参考表3(Date Table)来识别表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 JOINempdates表,并筛选出不存在的组合。一种方法是:

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;
cnh2zyt3

cnh2zyt32#

试试看:

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)

相关问题