我在做什么:
我正在编写一个 C# 应用程序来帮助员工处理电子邮件。我有一个包含邮件的数据库(SQL Server 2008 Express)。一个表包含邮件本身(每行都有 msgId、发件人、收件人、主题、正文
等列),另一个表包含员工如何处理邮件的数据 - 无论何时电子邮件分配了一些属性,具有该属性的新行将保存到第二个表中。
第二个表包含列:msgId、forTeam、notForTeam、processedByTeam
。每当员工将一条消息标记为与他的团队相关时,forTeam
列中就会保存一行带有 TEAMXX
值的信息。每当员工对电子邮件执行其他操作时,TEAMXX
值的行将保存在 processedByTeam
列中。
我正在尝试让电子邮件显示在“未处理” View 中,即。具有以下值的邮件:
forTeam: null
notForTeam: everything different than 'TEAM01'
processedByTeam: everything different than 'TEAM01'
我一直在尝试编写许多不同的查询,但它仍然无法按照我想要的方式工作,这让我抓狂。将感谢正确的查询。
示例:
邮件表(邮件
):
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# 应用程序有一个将邮件显示为“未处理”的 View ,即:
- 邮件 54 首先为 TEAM02 隐藏 - 对他们来说应该是不可见的
- 邮件 54 已分配给 TEAM01 - 现在他们应该可以在“本团队的” View 中看到
- 邮件 54 已由 TEAM01 处理 - 现在应该在“本团队” View 中不可见
- 邮件 53 已分配给 TEAM01 - 应该在他们的“本团队” View 中可见(并且只对他们可见)
- 邮件 53 对于 TEAM01 是隐藏的 - TEAM01 应该是不可见的(并且对于其他任何人,因为之前的操作)
- 邮件 56 已分配给 TEAM01 - 现在应该只有“本团队的”中的 TEAM01 可以看到
- 邮件 56 已由 TEAM01 处理 - 现在应该在“本团队的”中对 TEAM01 不可见
因此,根据两个表中的现有数据,TEAM01 最终应该只能在“未处理” View 中看到:
mail 55
最佳答案
DECLARE @teamName varchar(50) = 'TEAM01'
SELECT *
FROM Mails M
LEFT OUTER JOIN MailAssignments MA ON M.msgId = MA.msgId
WHERE MA.msgId IS NULL OR
(
MA.forTeam IS NULL AND
MA.notForTeam <> @teamName AND
MA.processedByTeam <> @teamName
)
这会如你所愿吗?
关于c# - 从数据库中获取未标记的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10613292/