【发布时间】:2017-07-02 19:27:39
【问题描述】:
我正在使用 Microsoft Access 来设计一个查询(我最终将在我的 MFC 应用程序中提取并使用它。到目前为止,我有这个:
SQL 视图是:
SELECT [Congregation Speaker Talks].talkno, [Congregation Speaker Talks].congregation
FROM [Congregation Speaker Talks]
WHERE ((([Congregation Speaker Talks].congregation)<>'Keynsham'))
ORDER BY [Congregation Speaker Talks].talkno;
目前的结果是:
所以它正在工作,因为没有列出值为 Keynsham 的记录。但正如你所看到的,有来自不同会众的多位演讲者进行了第 1 次演讲。我只希望这个数字出现一次。我尝试使用DISTINCT,但它不起作用。
更新
这有点帮助:
SQL "select where not in subquery" returns no results
我向您展示了我所做的,但我想避免将查询实际添加到表中。
第 1 步
我创建了一个查询并将其保存为KeynshamTalks:
SELECT [Public Talk Titles].[Talk Number]
FROM [Public Talk Titles] INNER JOIN [Congregation Speaker Talks] ON [Public Talk Titles].[Talk Number] = [Congregation Speaker Talks].talkno
WHERE ((([Congregation Speaker Talks].congregation)="Keynsham"))
ORDER BY [Public Talk Titles].[Talk Number], [Congregation Speaker Talks].congregation;
此查询返回所有会众演讲者谈话号码的列表,其中会众IS 设置为 Keynsham。
第 2 步
接下来,我在 Public Talk Titles 表上创建了一个新查询。该表每个通话号码只有一次。我使用KeynshamTalks查询的结果作为子查询:
SELECT *
FROM [Public Talk Titles]
WHERE ((([Public Talk Titles].[Talk Number]) Not In (SELECT [Talk Number]
FROM
[KeynshamTalks]
)))
ORDER BY [Public Talk Titles].[Talk Number];
这行得通。结果正是我想看到的。但是我怎样才能将第一个查询直接移动到第二个查询中,使其成为一个查询呢?
【问题讨论】:
-
为什么需要会众名称?
-
@serakfalcon 我不需要它可见。这只是为了发展。我所需要的只是一个唯一的谈话号码列表,其中会众不是 Keynsham。
-
然后使用 distinct 并删除会众名称。是会众名称导致数字重复且不同。
-
@serakfalcon 如果我删除会众名称,那么我无法将记录过滤到没有 Keynsham 的记录。