C# 从数据库中获取未标记的数据
我在做什么: 我正在编写一个C应用程序,它将帮助员工处理电子邮件。我有一个数据库和SQL Server 2008 Express。一个表包含邮件本身,每一行都有msgId、sender、recipients、subject、body等列,另一个表包含员工如何处理邮件的数据—只要电子邮件分配了某些属性,就会将具有该属性的新行保存到第二个表中 第二个表包含以下列:msgId、forTeam、notForTeam、processedByTeam。每当员工将消息标记为与其团队相关时,forTeam列中将保存一行,其中包含TEAMXX值。每当员工对电子邮件执行其他操作时,processedByTeam列中将保存一个具有TEAMXX值的行 我试图让电子邮件显示在未处理视图中,即具有以下值的邮件:C# 从数据库中获取未标记的数据,c#,sql-server-2008,tsql,C#,Sql Server 2008,Tsql,我在做什么: 我正在编写一个C应用程序,它将帮助员工处理电子邮件。我有一个数据库和SQL Server 2008 Express。一个表包含邮件本身,每一行都有msgId、sender、recipients、subject、body等列,另一个表包含员工如何处理邮件的数据—只要电子邮件分配了某些属性,就会将具有该属性的新行保存到第二个表中 第二个表包含以下列:msgId、forTeam、notForTeam、processedByTeam。每当员工将消息标记为与其团队相关时,forTeam列中将
forTeam: null
notForTeam: everything different than 'TEAM01'
processedByTeam: everything different than 'TEAM01'
我一直在尝试编写许多不同的查询,但它仍然不能按我想要的方式工作,这让我发疯。如能提出正确的问题,我们将不胜感激
例如:
有邮件的表格:
带有分配邮件分配的表:
现在,我希望我的C应用程序有一个视图,显示未处理的邮件,即:
邮件54首先为TEAM02隐藏-对他们来说应该是不可见的
邮件54已分配给TEAM01-现在应该可以在此团队视图中看到
邮件54由TEAM01处理-现在在该团队的视图中应该是不可见的
邮件53已分配给TEAM01-应在其团队视图中可见,且仅对其可见
邮件53对于TEAM01是隐藏的-对于TEAM01和其他任何人来说都应该是不可见的,因为prev。行动
邮件56已分配给TEAM01-现在应仅在该团队的
邮件56已由TEAM01处理-在该团队的
因此,在两个表中都有当前数据的情况下,TEAM01应该只在其未处理视图中看到:
mail 55
这能满足您的要求吗?好的,我需要更长时间测试,但目前看来效果很好!
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
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
)