我正在学习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子句阻止了记录的返回,那么这些语句都不会返回结果。我已经尝试了各种新西兰语,并且不是空话,没有运气。我很怀疑它实际上是由最后一行代码引起的。有没有办法解决这个问题?
答案 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
子句中使用的条件。