我在做什么:

我正在编写一个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    [email protected] test    test  2012-05-11 11:00
54    [email protected] test2   test2 2012-05-10 10:00
55    [email protected] blah    blah  2012-05-11 12:00
56    [email protected] 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处理-现在在“此团队的”中对于TEAM01应该不可见


因此,使用两个表中的当前数据,最后,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
      )


这会做你想要的吗?

关于c# - 从数据库获取未标记的数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10613292/

10-09 08:04