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

标签 c# sql-server-2008 tsql

我在做什么:

我正在编写一个 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 ,即:

  1. 邮件 54 首先为 TEAM02 隐藏 - 对他们来说应该是不可见的
  2. 邮件 54 已分配给 TEAM01 - 现在他们应该可以在“本团队的” View 中看到
  3. 邮件 54 已由 TEAM01 处理 - 现在应该在“本团队” View 中不可见
  4. 邮件 53 已分配给 TEAM01 - 应该在他们的“本团队” View 中可见(并且只对他们可见)
  5. 邮件 53 对于 TEAM01 是隐藏的 - TEAM01 应该是不可见的(并且对于其他任何人,因为之前的操作)
  6. 邮件 56 已分配给 TEAM01 - 现在应该只有“本团队的”中的 TEAM01 可以看到
  7. 邮件 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/

相关文章:

sql-server - 将行批量插入 SQL Server 的最快方法

sql-server - 在非常大的表中使用 CTE 与 WHILE 循环的 SQL 查询性能

sql-server - "INSTEAD OF UPDATE "触发器内部的MSSQL条件检查

c# - JsonDiffpatch().Diff() 无法比较电子邮件地址和长度超过 50 个字符的字符串?

sql - 查找日期差异的最佳方法是什么?

mysql - 选择查询以将日期格式显示为 mmm dd yyyy hh :mm am in SQL server 2008

sql-server - 从 SQL Server 查询 "Microsoft.ACE.OLEDB.12.0"提供程序时出错

c# - 如果角度太大,对象将开始沿对撞机边缘移动

c# - 无法使用 keyboard.sendkeys 发送逗号

c# - WPF DataGrid DataContext 极慢