MS Access 中的条件选择语句

Posted

技术标签:

【中文标题】MS Access 中的条件选择语句【英文标题】:Conditional Select Statement in MS Access 【发布时间】:2012-01-11 01:14:08 【问题描述】:

我想在 MS Access 中创建一个查询,它将根据一个表中的值显示来自两个表的信息。这两个表都有完全相同的列。一个已设置记录,另一个具有访问者可以插入/编辑/删除的记录。出于这个问题的目的,我将表称为 TableA 和 TableB。 TableA 有预定记录,不能更改。多个用户将使用这些记录。访问者会将记录添加到 TableB。我需要一个查询来显示来自 TableA 的记录,除非访问者将记录添加到 TableB,然后它会显示该记录。我需要加入的字段是 CategoryID。所以我需要的基本上是这样的;

If TableB.CategoryID Is Not Null Then 
Select * From TableB
Else
Select * From TableA
End If

感谢任何人提供的任何帮助。

JW

【问题讨论】:

你必须创建程序 - msdn.microsoft.com/en-us/library/bb177892(v=office.12).aspx 【参考方案1】:

您可以通过合并各个表查询来获得部分解决方案;如果 B 中没有任何内容,则有效,但如果有则显示 A 记录。

假设我们创建了一个和 A 一样的表,比如 A2,但添加了一个列:B 中的记录数。然后我们选择 A2 中这个新列为 0 的所有记录,并且只选择最初的列在一个;称之为 A3。

现在考虑 A3 和 B 的并集。如果 B 为空,我们得到 A。如果 B 不为空,则不会为 A3 选择来自 A2 的任何记录,我们只剩下 B。

【讨论】:

感谢 Scott 的建议,非常感谢您抽出宝贵时间回复此帖。【参考方案2】:

这比起初看起来要容易。您必须在 CategoryID 上加入两个表,然后有条件地选择正确的项目,如下所示:

SELECT tA.CategoryID, IIF(tB.CategoryID IS NULL, tA.txtEntry, tB.txtEntry) AS EntryText, 
tB.CategoryID IS NULL AS bOriginalEntry
FROM TableA AS tA LEFT JOIN TableB AS tB ON tA.CategoryID=tB.CategoryID

但是有一个警告:如果TableB 为空,则连接将产生一个空集!只需使用至少一条记录填充TableB(最好使用无效的 CategoryID,这样它就不会与TableA 中的有效记录连接。 bOriginalEntry 只是一个布尔表达式,用于显示 EntryText 是源自 TableA 还是 TableB

【讨论】:

【参考方案3】:

我发现这个线程正在寻找类似的问题。注意自己和他人。 您可以使用连接类型来处理条件选择中可能存在的不同值, MS Access 没有 MS SQL 所具有的全部 JOIN 范围,但您可以“捏造”它。 例如 全外连接:所有数据,在可行的情况下合并 在某些系统中,外连接可以包括两个表中的所有行,当它们对应时合并行。这称为完全外部联接,Access 不明确支持它们。但是,您可以使用交叉连接和条件来实现相同的效果。 https://support.office.com/en-us/article/join-tables-and-queries-3f5838bd-24a0-4832-9bc1-07061a1478f6#typesofjoins

【讨论】:

以上是关于MS Access 中的条件选择语句的主要内容,如果未能解决你的问题,请参考以下文章

MS Access 查询条件示例

将下拉菜单链接到 MS Access 中的新表单

在 ms-Access 中使用组合框创建搜索表单

SQL MS Access查询的排除条件

查询不使用 MS-Access 中的日期条件进行拉取

MS Access VBA:基于查询结果的 VBA 命令