我想在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
答案 0 :(得分:0)
通过联合各个表查询,您可以获得部分方式;如果B中没有任何内容,则可以正常工作,但如果有,则显示A记录。
所以假设我们创建了一个像A一样的表,比如A2,但是添加了一列:B中的记录数。然后我们选择A2中所有记录的新列0,最初只列列在一个;叫这个A3。
现在考虑A3&的联合B.如果B为空,我们得到A.如果B不为空,那么A2的所有记录都不会被选择用于A3,而我们只留下B。
答案 1 :(得分:0)
这比起初看起来容易。您必须在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
(最好是一条记录无效的类别ID,因此它不会与TableA
中的有效记录一起加入。
bOriginalEntry
只是一个布尔表达式,用于显示EntryText是源于TableA
还是TableB
。
答案 2 :(得分:0)
我发现此线程正在寻找类似的问题。注意自己和他人。 您可以使用联接类型来处理条件选择中可能存在的不同值, MS Access没有MS SQL具有的全部JOIN,但是您可以“捏造”它。 例如 完全外部联接:所有数据,在可行的情况下进行组合 在某些系统中,外部联接可以包括两个表中的所有行,并在对应时将行合并。这称为完全外部联接,Access并未明确支持它们。但是,您可以使用交叉联接和条件来达到相同的效果。 https://support.office.com/en-us/article/join-tables-and-queries-3f5838bd-24a0-4832-9bc1-07061a1478f6#typesofjoins