【发布时间】:2021-12-18 00:55:32
【问题描述】:
我正在尝试从一个表中获取数据,同时删除另一个表中存在的信息。但是,我还添加了第三个表,并且我希望在输出中看到每个表的不同列名和数据。
例如,我有这样的数据:
表 1:成员 m
列:m.ID、m.cancelled_on
表 2:MEMBER_CATEGORY mc
列:mc.ID、mc.activity、mc.activity_date
表 3:MEMBER_CONTACT_SUPPRESSIONS mcs
列:mcs.ID、mcs.mailing_suppression、mcs.valid_to
我想通过过滤 m.cancelled_on IS NULL 来获取所有活跃成员。
然后我想从这些活跃成员中找到在特定日期范围内参与特定活动的成员。例如,在 2020 年 12 月 1 日和 2021 年 10 月 1 日之间“划船”。
我想根据这些数据集联系这些人。因此,我需要删除所有具有特定邮件抑制(例如,请勿联系)的人,该邮件抑制在比昨天晚的任何日期都有效。
关系说明:m.ID = mc.ID = mcs.ID
示例数据:
表 1:成员 m
| m.ID | m.cancelled_on |
|---|---|
| 1 | NULL |
| 2 | NULL |
| 3 | NULL |
| 4 | NULL |
| 5 | NULL |
| 6 | 2020-12-10 |
表 2:MEMBER_CATEGORY mc
| mc.ID | mc.activity | mc.activity_date |
|---|---|---|
| 1 | rowing | 2020-12-20 |
| 1 | rowing | 2020-12-20 |
| 2 | rowing | 2021-08-20 |
| 3 | rowing | 2021-05-25 |
| 4 | rowing | 2019-12-20 |
| 5 | cycling | 2020-10-10 |
| 6 | rowing | 2020-12-10 |
表 3:MEMBER_CONTACT_SUPPRESSIONS mcs
| mcs.ID | mcs.mailing_suppression | mcs.valid_to |
|---|---|---|
| 1 | NULL | NULL |
| 2 | DO NOT SMS | 2121-05-25 |
| 2 | DO NOT CONTACT | 2021-05-25 |
| 3 | DO NOT CONTACT | 2121-05-25 |
| 4 | NULL | NULL |
| 5 | DO NOT CONTACT | 2020-09-10 |
| 6 | NULL | NULL |
所以我将使用上面的示例应用的标准:
m.cancelled_on IS NULL, AND
mc.activity = 'rowing', AND
mc.activity_date BETWEEN '2020-12-01' AND '2021-10-01'
现在从结果数据中删除以下内容:
mcs.mailing_suppression IN ('DO NOT CONTACT','DO NOT TELEPHONE','DO NOT EMAIL'),
AND mcs.valid_to >= 2021-11-02)
然后我需要正确的结果显示如下:
| m.ID | m.cancelled_on | mc.activity | mc.activity_date | mcs.mailing_suppression | mcs.valid_to |
|---|---|---|---|---|---|
| 1 | NULL | rowing | 2020-12-20 | NULL | NULL |
| 2 | NULL | rowing | 2021-08-20 | DO NOT CONTACT | 2021-05-25 |
我已经尝试了各种 JOIN、EXCEPT、INTERSECT 组合,但我似乎无法得到它,所以现在非常感谢任何帮助!
提前致谢
【问题讨论】:
-
感谢@Michael 的所有帮助。
标签: sql sql-server join