这个SQL有什么问题(使用IN的子查询)?

时间:2014-10-07 14:46:15

标签: sql ms-access

我正在使用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))末尾的缺失括号,但仍然出现相同的错误。

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)
                   );

这也可能有更好的表现。