我有以下T-SQL查询(一个简单的测试用例)在MS SQL中运行良好,但无法在MS Access(JET-SQL)中获得等效查询。问题是左联接中的附加条件。 如何在MS Access中做到这一点?
T-SQL:
SELECT * FROM A LEFT OUTER JOIN B ON A.ID = B.A_ID AND B.F_ID = 3
JET-SQL(到目前为止,我所拥有的只是使Access崩溃!):
SELECT * FROM dbo_A LEFT JOIN dbo_B ON (dbo_A.ID = dbo_B.A_ID AND dbo_B.F_ID = 3)
您需要使用子选择来应用条件:
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;
您是否需要在Access中对其进行编辑?如果没有,只需对本机T- SQL使用传递查询。如果是这样,我可能会为此创建一个服务器端视图,如果文字值是您要参数化的值(例如F_ID = 3实际上是F_ID = N,其中N是在运行时选择的值)。
顺便说一句,我在Access中工作的每一天都写这些子选择派生表SQL语句。没什么大不了的。