C# 从数据库中获取未标记的数据

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列中将

我在做什么:

我正在编写一个C应用程序,它将帮助员工处理电子邮件。我有一个数据库和SQL Server 2008 Express。一个表包含邮件本身,每一行都有msgId、sender、recipients、subject、body等列,另一个表包含员工如何处理邮件的数据—只要电子邮件分配了某些属性,就会将具有该属性的新行保存到第二个表中

第二个表包含以下列:msgId、forTeam、notForTeam、processedByTeam。每当员工将消息标记为与其团队相关时,forTeam列中将保存一行,其中包含TEAMXX值。每当员工对电子邮件执行其他操作时,processedByTeam列中将保存一个具有TEAMXX值的行

我试图让电子邮件显示在未处理视图中,即具有以下值的邮件:

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
      )