我在做什么:
我正在编写一个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/