一尘不染

是否可以在Access的联接条件中使用子查询?

sql

在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,但是我的问题是JOINAccess中的可能性。


阅读 119

收藏
2021-05-16

共1个答案

一尘不染

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

句法

从table1 [左| 右] 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
2021-05-16