下面的test查询(一个简单的测试用例)在MS中运行良好,但无法在MS (JET- SQL )中获得等效的查询。问题是左侧联接中的附加条件。如何在MS Access中做到这一点?
:
SELECT * FROM A
LEFT OUTER JOIN B ON A.ID = B.A_ID
AND B.F_ID = 3JET-SQL (到目前为止,我拥有的是崩溃访问!):
SELECT * FROM dbo_A
LEFT JOIN dbo_B ON (dbo_A.ID = dbo_B.A_ID AND dbo_B.F_ID = 3)发布于 2010-01-07 03:13:56
您需要使用子subselect来应用条件:
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,则可以执行更标准的操作:
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语句。没什么大不了的。
发布于 2010-01-06 21:19:15
当它崩溃时,你会收到错误信息吗?还是只是锁上了?从dbo_B名称判断,我猜这些是Access中的链接表。我相信,当您这样做连接时,Access并没有告诉SQL server它需要连接的结果,它说,“给我两个表的所有行”,然后它尝试自己加入它们。如果表非常大,则会导致应用程序锁定。
您最好在Server上创建一个视图,以满足您的需要。
发布于 2020-04-24 06:34:35
我认为access女士希望在Joins ON子句的每一节中都使用两个表的名称。作为一个诀窍,这对我来说是有效的:
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中的任何其他字段
https://stackoverflow.com/questions/2015878
复制相似问题