我正在使用Access中的联结表(实际上是一个定义父>子关系的自联接表),并且遇到了我需要进行的一些联接的麻烦。
我目前在一个查询中有以下内容:
(SELECT AccountID
FROM tblAccount
WHERE AccountTypeID IN (1, 2))
UNION (SELECT ChildAccountID
FROM qryAccJunctionDetails
WHERE (ParentAccountTypeID IN (1, 2)));
哪种方法正常:它提供了AccountID
的列表,其中AccountTypeID
为1或2,或者该帐户是AccountTypeID
= 1或2的其他帐户的子项
然后我尝试将其用作子查询来查找与此结果相关的其他字段值,如下所示:
SELECT AccountName
FROM qryAccountNamesConcat
WHERE AccountID IN(
(
SELECT AccountID
FROM tblAccount
WHERE AccountTypeID IN (1, 2)
)
UNION (
SELECT ChildAccountID
FROM qryAccJunctionDetails
WHERE (ParentAccountTypeID IN (1, 2))
)
);
我收到错误:"Syntax error (missing operator) in query expression 'AccountID IN(...."
然后继续列出到语句的末尾。
我尝试过它的变体,似乎无法让它发挥作用。可能是我完全误解了如何以这种方式将子查询放在一起。
编辑:现在修复(ParentAccountTypeID IN (1, 2))
末尾的缺失括号,但仍然出现相同的错误。
答案 0 :(得分:1)
关闭括号,试试这个
SELECT AccountName
FROM qryAccountNamesConcat
WHERE AccountID IN(
(
SELECT AccountID
FROM tblAccount
WHERE AccountTypeID IN (1, 2)
)
UNION (
SELECT ChildAccountID
FROM qryAccJunctionDetails
WHERE (ParentAccountTypeID IN (1, 2)) <-- here
)
);
答案 1 :(得分:1)
通过两个单独的比较来做到这一点:
SELECT AccountName
FROM qryAccountNamesConcat
WHERE AccountID IN (SELECT AccountID
FROM tblAccount
WHERE AccountTypeID IN (1, 2)
) OR
AccountID IN (SELECT ChildAccountID
FROM qryAccJunctionDetails
WHERE ParentAccountTypeID IN (1, 2)
);
这也可能有更好的表现。