sql >> データベース >  >> RDS >> Oracle

テーブルのCONNECTBYLEVELが余分な行を返すのはなぜですか?

    最初のクエリでは、レベルだけで接続します。したがって、レベル<=1の場合、各レコードを1回取得します。レベル<=2の場合、各レベルを1回(レベル1の場合)+ N回(Nはテーブル内のレコード数)取得します。結果を制限する他の条件がなくても、レベルに達するまでテーブルからすべてのレコードを選択しているだけなので、クロスジョインしているようなものです。レベル<=3の場合、これはこれらの結果ごとに再度実行されます。

    したがって、3つのレコードの場合:

    • レベル1:3レコード(すべてレベル1)
    • レベル2:レベル1の3つのレコード+レベル2の3*3のレコード=12
    • レベル3:3 + 3 * 3 + 3 * 3 * 3 =39(実際、各13レコード)。
    • レベル4:パターンが見え始めましたか? :)

    それは実際にはクロスジョインではありません。クロス結合は、このクエリ結果でレベル2のレコードのみを返しますが、この接続を使用すると、レベル1のレコードとレベル2のレコードが取得されるため、結果は3 + 3*3になります。 3*3レコード。



    1. PHP-MySQL永続接続を使用してWordPressブログを実行する

    2. 主キーと一意キーの違い

    3. ダイナミックサンプリング12cで私を殺す

    4. SQLServer2019でファイルを削除する方法