在 SQL 中使用 Left Anti Join

Using Left Anti Join in SQL

我有一个会话 table 喜欢 (table1):

session ID sender ID event date
s1 s1 2020-10-02
s2 s1 2020-10-06
s3 s2 2020-03-01
s4 s2 2020-03-02
s5 s3 2020-08-02
s6 s4 2020-02-02

还有一笔交易 table (table2) 例如:

transaction ID sender ID send date
t1 s1 2020-10-01
t2 s1 2020-10-05
t3 s2 2020-04-01
t4 s3 2020-07-02
t5 s4 2020-12-12

我想生成一个 table,其中仅包含在会话日期之前未进行任何交易的用户的会话。根据上面的tables,我要return:

session ID sender ID event date
s3 s2 2020-03-01
s4 s2 2020-03-02
s6 s4 2020-02-02

我想使用 Anti-Join 解决这个问题。以下代码是否适用于此目的?

SELECT * 
FROM table1 t1
LEFT JOIN table2 t2
    ON t2.sender_id = t1.sender_id 
    AND t2.event_date > t1.event_date
WHERE t2.sender_id IS NULL

请随意提出除反加入以外的任何方法。 谢谢!

您可以使用 EXISTS 作为:

select *
from t1
where not exists (
  select 1 
  from t2 
  where t2.sender_id = t1.sender_id and t2.send_date < t1.event_date
)