我在做什么:
我正在编写一个 C# 应用程序,它将帮助员工处理电子邮件。我有一个带有邮件的数据库(SQL Server 2008 Express)。一个表包含邮件本身(每一行都有类似的列msgId, sender, recipients, subject, body
),另一个表包含员工如何处理邮件的数据 - 每当电子邮件分配了某些属性时,具有该属性的新行将保存到第二个表.
第二个表包含列:msgId, forTeam, notForTeam, processedByTeam
。每当员工将消息标记为与其团队相关时,都会在列中保存一行并带有TEAMXX
值forTeam
。每当员工对电子邮件执行其他操作时,都会在列中保存一行具有TEAMXX
值的processedByTeam
。
我正在尝试让电子邮件显示在“未处理”视图中,即。具有以下值的邮件:
forTeam: null
notForTeam: everything different than 'TEAM01'
processedByTeam: everything different than 'TEAM01'
我一直在尝试编写许多不同的查询,但它仍然无法按照我想要的方式工作,这让我发疯了。将不胜感激正确的查询。
例子:
带有邮件 ( Mails
) 的表格:
msgId sender subject body received (sortingTime)
53 x@x.com test test 2012-05-11 11:00
54 b@b.com test2 test2 2012-05-10 10:00
55 h@h.com blah blah 2012-05-11 12:00
56 t@t.com dfgg dfgg 2012-05-11 12:30
带作业的表 ( MailAssignments
):
msgId forTeam notForTeam processedByTeam
54 null TEAM02 null - this means TEAM02 hid the mail from their view
54 TEAM01 null null - this means TEAM01 assigned the mail to them
54 null null TEAM01 - TEAM01 has processed the mail
53 TEAM01 null null - invisible to other teams
53 null TEAM01 null - invisible for TEAM01 (and also for others because of the above)
56 TEAM01 null null
56 null null TEAM01 - mail processed by TEAM01
现在,我希望我的 C# 应用程序有一个视图,它将邮件显示为“未处理”,即:
- 邮件 54 最初是为 TEAM02 隐藏的 - 对他们来说应该是不可见的
- 邮件 54 已分配给 TEAM01 - 现在应该在“此团队的”视图中对他们可见
- 邮件 54 已由 TEAM01 处理 - 现在应该在“此团队的”视图中不可见
- 邮件 53 已分配给 TEAM01 - 应该在他们的“这个团队”视图中可见(并且仅对他们)
- 邮件 53 已为 TEAM01 隐藏 - 对 TEAM01 应该是不可见的(由于之前的操作,对于其他任何人来说)
- 邮件 56 已分配给 TEAM01 - 现在应该只对“此团队的”中的 TEAM01 可见
- 邮件 56 已由 TEAM01 处理 - 现在应该在“This Team's”中对 TEAM01 不可见
因此,对于两个表中的当前数据,最后,TEAM01 应该只在其“未处理”视图中看到:
mail 55