首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >让JOINing了解MS Access中的附加标准

让JOINing了解MS Access中的附加标准
EN

Stack Overflow用户
提问于 2010-01-06 20:13:31
回答 4查看 20.8K关注 0票数 8

下面的test查询(一个简单的测试用例)在MS中运行良好,但无法在MS (JET- SQL )中获得等效的查询。问题是左侧联接中的附加条件。如何在MS Access中做到这一点?

代码语言:javascript
复制
SELECT * FROM A 
LEFT OUTER JOIN B ON A.ID = B.A_ID 
                 AND B.F_ID = 3

JET-SQL (到目前为止,我拥有的是崩溃访问!):

代码语言:javascript
复制
SELECT * FROM dbo_A 
LEFT JOIN dbo_B ON (dbo_A.ID = dbo_B.A_ID AND dbo_B.F_ID = 3)
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-01-07 03:13:56

您需要使用子subselect来应用条件:

代码语言:javascript
复制
  SELECT *
  FROM dbo_A LEFT JOIN 
    [SELECT dbo_B.* FROM dbo_B WHERE dbo_B.F_ID = 3]. AS dbo_B 
      ON dbo_A.ID = dbo_B.A_ID;

如果在打开"SQL 92“兼容模式下运行Access,则可以执行更标准的操作:

代码语言:javascript
复制
  SELECT *
  FROM dbo_A LEFT JOIN 
    (SELECT dbo_B.* FROM dbo_B WHERE dbo_B.F_ID = 3) AS dbo_B 
      ON dbo_A.ID = dbo_B.A_ID;

您是否需要在访问中可编辑此文件?如果没有,只需使用本机T的直通查询即可。如果是这样的话,我可能会为此创建一个服务器端视图,如果文本值是要参数化的(例如,F_ID=3实际上是F_ID=N,其中N是在运行时选择的值),我尤其希望将它移动到服务器端。

顺便说一下,在Access中工作时,我每天都会编写这些子选择派生表SQL语句。没什么大不了的。

票数 13
EN

Stack Overflow用户

发布于 2010-01-06 21:19:15

当它崩溃时,你会收到错误信息吗?还是只是锁上了?从dbo_B名称判断,我猜这些是Access中的链接表。我相信,当您这样做连接时,Access并没有告诉SQL server它需要连接的结果,它说,“给我两个表的所有行”,然后它尝试自己加入它们。如果表非常大,则会导致应用程序锁定。

您最好在Server上创建一个视图,以满足您的需要。

票数 1
EN

Stack Overflow用户

发布于 2020-04-24 06:34:35

我认为access女士希望在Joins ON子句的每一节中都使用两个表的名称。作为一个诀窍,这对我来说是有效的:

代码语言:javascript
复制
SELECT * FROM A 
LEFT OUTER JOIN B ON A.ID = B.A_ID 
                 AND B.F_ID = IIF(True, 3, A.ID) 

A.ID或表A中的任何其他字段

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2015878

复制
相关文章

相似问题

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