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 のそれぞれがレコードを返す限り、完全に機能します。3 つのステートメントのいずれかの where 句によってレコードが返されない場合、どのステートメントも結果を返しません。私はさまざまなNZを試しましたが、運のないnullステートメントではありません。実際には、フィールドを同等にするコードの最後の行が原因であると思われます。これを回避する方法はありますか?

4

1 に答える 1

3

まず第一に、select * from A, B, C(データセットはどこにありますかA, B, C)のようなことをすると、のデカルト積が返されますA, B, C。つまり、#(A)*#(B)*#(C)行があります (#(A)はセット A の行数です)。したがって、もちろん、セットの 1 つが空であれば、セット全体が空です。

考えられる解決策:片側結合を使用します。

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 に答える