0

我正在学习 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 子句阻止了记录的返回,那么这些语句都不会返回结果。我尝试了各种 NZ 并且不是没有运气的空语句。我怀疑这实际上是由使字段等效的最后一行代码引起的。有没有办法解决?

4

1 回答 1

3

首先,当您执行类似select * from A, B, CA, 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值。

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

于 2013-09-25T16:45:10.403 回答