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

4

1 回答 1

13

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

句法

从表 1 [ 左 | 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
于 2012-11-26T15:29:46.317 回答