在表A中查找在表B中缺失的记录,其中这些记录在表C中不存在

3

I have 3 tables:

Customer (CustomerID)
CustomerEvent (CustomerEventID, CustomerID, EventTypeID)
EventType (EventTypeID)

一些客户记录有事件类型的客户事件记录,而一些客户记录没有客户事件记录。

我该如何识别/插入每个客户记录的每个事件类型缺失的客户事件记录?

我的实际问题比这个更详细,但这是我遇到困难的部分。

我能否使用一个select语句来识别所有缺失的客户事件记录?还是需要在每个事件类型记录上进行UNION操作?

2个回答

3
使用“cross join”生成所有“CustomerId, EventTypeId”组合的集合并使用“not exists()”过滤那些已经存在于“CustomerEvent”中的组合。
select c.CustomerId, e.EventTypeId
from Customer c
  cross join EventType e
where not exists (
  select 1
  from CustomerEvent ce
  where c.CustomerId = ce.CustomerId
    and e.EventTypeId = ce.EventTypeId
    )

我没有考虑过交叉连接,这解决了问题。谢谢! - st0rmyc

0
select * from 

CUSTOMEREVENT CE

left join CUSTOMER C ON C.CustomerID = CE.CustomerID

left join EVENTTYPE ET ON CE.EventTypeID = ET.EventTypeID

where
C.CustomerID IS NULL
OR ET.EventTypeID IS NULL

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接