在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中的可能性。
WHERE
JOIN
根据MSDN文档,这是不可能的:
句法 从table1 [左| 右] JOIN table2 ON table1.field1 compopr table2.field2
句法
从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