在Access中,可以在联接条件中使用子查询吗?

11
在postgresql中,我可以在连接条件中使用子查询。
SELECT * 
FROM table1 LEFT JOIN table2
     ON table1.id1 = (SELECT id2 FROM table2 LIMIT 1);

但是当我尝试在Access中使用它时

SELECT *
FROM table1 LEFT JOIN table2 
     ON table1.id1 = (SELECT TOP 1 id2 FROM table2);

我遇到了语法错误。这在Access中是否真的不可能,还是只是我的错误?

我知道我可以通过 WHERE 获得相同的结果,但我的问题是关于在Access中使用JOIN的可能性。

1个回答

14
根据MSDN文档,这是不可能的:

语法

FROM table1 [ LEFT | RIGHT ] JOIN table2 ON table1.field1 compopr table2.field2

并且(强调我的):

field1, field2:要连接的字段的名称。 这些字段必须是相同的数据类型并包含相同类型的数据,但它们不需要具有相同的名称。

似乎您甚至不能在连接中使用硬编码的值; 您必须指定要加入的列名。

对于您的情况,您需要:

SELECT *
FROM Table1
LEFT JOIN (
    SELECT DISTINCT TOP 1 ID 
    FROM Table2
    ORDER BY ID
) Table2Derived ON Table1.ID = Table2Derived.ID

+1 在几乎所有情况下,我都放弃了子查询,因为派生表在大多数情况下具有更好的性能。 - Matt Donnan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接