首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MS Access中从非空表执行SQL

问在MS Access中从非空表执行SQL
EN

Stack Overflow用户
提问于 2014-08-25 02:13:37
回答 2查看 120关注 0票数 1

假设您在MS Access中有两个表,Table1和Table2具有相同的结构(即相同的列)。我想写一个查询,如果Table1是空的,那么我必须从Table2获取数据,否则从Table1获取数据。

我不确定如何以这种方式使用IIF语句。

EN

回答 2

Stack Overflow用户

发布于 2014-08-25 02:30:28

这只是个想法。我的计算机上没有MS-Access,但SQL Server接受它:

代码语言:javascript
复制
SELECT Col1, Col2, ... FROM (
    SELECT 1 AS TAG, Col1, Col2, ... FROM Table1
    UNION
    SELECT 2 AS TAG, Col1, Col2, ... FROM Table2) AS TBL_PARENT
    WHERE TBL_PARENT.TAG = (SELECT MIN(TAG) FROM 
         (SELECT TOP 1 1 AS TAG FROM Table1
         UNION
         SELECT TOP 1 2 AS TAG FROM Table2) AS TBL)

说明

如果Table1为空,则SELECT MIN(TAG)将返回2,否则返回1。然后,WHERE子句将筛选出属于所需表的所有行。之所以使用最外层的SELECT,是因为SQL Server不允许在WHERE子句中使用列别名(这里的别名是TAG)。因此,我们必须创建一个临时列,以便可以访问TAG列。

票数 0
EN

Stack Overflow用户

发布于 2014-08-25 04:12:00

由于您需要一些条件设置,并且MS Access不运行触发器或transact SQL,因此除了使用存储SQL查询或VBA SQL查询之外,还应考虑使用VBA。

当然,要确定将其放入哪个表单事件触发器--OnOpen、OnClick、AfterInsert、AfterUpdate:

代码语言:javascript
复制
IF DCount("ID", "Table1") = 0 Then
    'VBA Recordset Query
    db.OpenRecordset Table2sSQLString, dbOpenDynaset
    'Stored SQL Query  
    DoCmd.OpenQuery "Table2Query"
Else
    'VBA Recordset Query
    db.OpenRecordset Table2SQLString, dbOpenDynaset
    'Stored SQL Query
    DoCmd.OpenQuery "Table1Query"                      
End If
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25474784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档