2014-10-07 40 views
0

我正在使用Access中的联结表(实际上是一个定义父>子关系的自联接表),并且遇到了一些我需要创建的联接时遇到的问题。这个SQL有什么问题(使用IN的子查询)?

目前,我有以下在一个查询:

(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))末尾丢失的括号,但仍然得到相同的错误。

+1

你在'WHERE(ParentAccountTypeID IN(1,2)' – Compass 2014-10-07 14:48:28

回答

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

这也可能有较好表现。

+1

这现在可以工作,但我很好奇为什么我的原始版本不能正常工作,因为就我而言可以看到它应该工作。任何想法,我做了什么错? – WhatEvil 2014-10-07 14:57:19

+0

我也好奇为什么代码IP下面的osted不起作用 – Alex 2014-10-07 15:02:11

+1

@Alex。 。 。您的代码有两组括号,可能会导致Access关闭。另外,Access对子查询中的'union'非常挑剔。在这种情况下他们可能不被允许。访问与标准和其他数据库有很大的不同,因此很难说为什么它不起作用,什么时候不起作用。 – 2014-10-07 15:04:15

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

'末尾缺少一个paren啊,是的,我是,但是在修复它后我仍然得到相同的错误 – WhatEvil 2014-10-07 14:50:31

+0

也许我们需要; – Alex 2014-10-07 14:52:57

+0

不好,在添加这些后仍然会出现同样的错误 – WhatEvil 2014-10-07 14:56:30