Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 是否可以在Access的联接条件中使用子查询?_Sql_Ms Access_Join_Ms Access 2007_Left Join - Fatal编程技术网

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

Sql 是否可以在Access的联接条件中使用子查询?,sql,ms-access,join,ms-access-2007,left-join,Sql,Ms Access,Join,Ms Access 2007,Left Join,在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); 我发现语法错误。这实际上是不可

在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);
我发现语法错误。这实际上是不可能的,还是我的错误


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

这是不可能的,根据:

语法

从表1[左|右]连接表1.field1上的表2组合表2.field2

和(我的重点):

字段1、字段2:所联接字段的名称。字段必须具有相同的数据类型并包含相同类型的数据,但不需要具有相同的名称

看起来您甚至不能在联接中使用硬编码值;必须指定要联接的列名

在您的情况下,您需要:

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

+1我在几乎所有情况下都不再使用子查询,因为派生表在大多数情况下提供了更高的性能