Vb.net查询访问数据库表具有相同字段上的2个条件

时间:2019-02-12 20:36:46

标签: vb.net

简短的背景信息;

我收到带有字母数字数字,状态字段,电子邮件接收时间和发件人姓名的通知电子邮件。

我有一个数据库,其中装有这些Outlook电子邮件。例如:

Number            status     receivingtime           sender
Xyz12345          new        22.01.2019 20:22:16     abc
Xyz5683           new        23.01.2019 15:45:55     abc
Xyz12345          closed     23.01.2019 14:32:30     abc
Xyz8765           new        24.01.2019 16:55:32     abc
Xyz9999           closed     2t.01.2019 09:10:11     abc

我需要一个查询(数字,状态,时间,发件人),如果未设置为关闭状态,则仅提取新项目。

在上面给出的示例中,提取的数据应为xyz5683和xyz8765 我已经尝试过使用for循环来执行此操作,因为性能很差,我不太喜欢。

我还通过填充2个数据表并将它们连接在一起进行了尝试,但linq除外。由于我喜欢将其存储在任何地方以备将来使用,因此我也跳过了此方法。我希望

1。)将所有电子邮件导入到访问数据库

2。)根据需要查询

我阅读了许多采用不同解决方案的文章,但无法弄清楚该怎么做...。也许我已经被困住了,因为我觉得太难了。

您对我该怎么做有任何想法吗?

1 个答案:

答案 0 :(得分:0)

您提到了Access,所以我的第一个解决方案将为您提供想要的内容。

在功能区/工具栏上的屏幕顶部,您可以创建查询。创建>查询设计>关闭按钮>功能区上的SQL视图。

首先,使用以下SQL创建一个名为“ closed”的新查询:

Select Distinct [Number] From status_table where status = 'closed'

然后,创建所谓的不匹配查询

Select st.[Number], st.status, st.receivingtime, st.sender From status_table as st
    Left Join closed as cls on st.[Number] = cls.[Number]
Where cls.[Number] Is Null;

查询将仅显示未关闭的行。您也可以尝试“查找不匹配的查询向导”,然后按照以下步骤从列表中删除已关闭的项目。在运行向导之前,您仍然需要创建名为“ closed”的查询。

如果您有SQL Server,则可以在一个查询中执行此操作:

With cls As  --closed items
(Select Distinct [Number] 
    From status_table where status = 'closed')
Select st.[Number], status, receivingtime, sender From status_table st
    Left Join cls on st.[Number] = cls.[Number]
Where cls.[Number] Is Null;

此示例适用于Microsoft T-SQL,但是您可以在其他数据库类型(如Oracle)中使用类似的语法进行类似的查询。在大多数环境中,性能应该不错。