在From中访问SQL子查询

时间:2013-09-25 16:29:24

标签: sql ms-access subquery

我正在学习Access和SQL,但是我在使用from子句中的子查询时遇到了一个问题,我似乎无法弄清楚。

Select *
From (LongSubQuery) as a, (LongSubQuery) as b, (LongSubQuery) as c
Where a.field=b.field=c.field;

只要from子句中的每个语句A,B和C都返回一条记录,它就能完美地工作。如果三个语句中的任何一个中的where子句阻止了记录的返回,那么这些语句都不会返回结果。我已经尝试了各种新西兰语,并且不是空话,没有运气。我很怀疑它实际上是由最后一行代码引起的。有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:3)

首先,当您执行类似select * from A, B, C(其中A, B, C是数据集)的操作时,您将返回A, B, C的笛卡尔积;换句话说,您将拥有#(A)*#(B)*#(C)行(其中#(A)是集合A中的行数)。所以,当然,如果其中一个集合为空,则整个集合为空。

可能的解决方案:使用单边连接:

select *
from 
    (select ...) as a
    left join (select ...) as b on a.aField = b.aField ...
    left join (select ...) as c on b.aField = c.aFiedl ...

left join返回关系左侧的所有行以及关系右侧的所有匹配行(如果已满足),如果未满足,则返回null值。 / p>

建立关系时要小心。请务必使用您需要的字段。请注意,在这种情况下,您可以直接在连接构造中定义您在where子句中使用的条件。