LEFT JOIN
QuerySet
に別のものを割り当てることは可能ですか?QuerySetを別のQuerySetに継承したままにする
QuerySet1.filter(foreign_key__in=QuerySet2)
は、同様の効果を達成する方法はありますが、LEFT
ではなくINNER JOIN
と:私は次のように、それは、INNER JOIN
2することができます知っていますか?
LEFT JOIN
QuerySet
に別のものを割り当てることは可能ですか?QuerySetを別のQuerySetに継承したままにする
QuerySet1.filter(foreign_key__in=QuerySet2)
は、同様の効果を達成する方法はありますが、LEFT
ではなくINNER JOIN
と:私は次のように、それは、INNER JOIN
2することができます知っていますか?
これは内部結合ではありません。これは副選択クエリです。クエリセット2のFKを持つqueryset1のすべての結果を表示しますが、結びつきではありません。最後に、Q1テーブルの要素のみがあり、q2の要素はありません。
実際の結合を行うための唯一の方法は、select_related
を使用することです。ここでは、table1の外部キーの関係に結合の結果が事前に設定されています。したがって、デフォルトでは、これは左辺結合であり、内部結合ではありません.table1の要素を取得すると、table2に一致するものがあるかどうかがわかります。
2つの手法を組み合わせて内部結合をシミュレートすることができます。QuerySet1.select_related().filter(foreign_key__in=QuerySet2)
しかし、問合せ作成者がこれらを1つの結合に結合するのに十分かどうか、または結合+副選択を行うかどうかはわかりません。
左外側には、あなたが最初のクエリセットからすべての結果を望ん手段に参加し、その後、あなたの答えへの応答は次のとおりです。
QuerySet1.all()
あなたはselect_relatedに関連するテーブルのプロパティを選択することができますことを覚えておいてください:
QuerySet1.select_related('model2__model3__some_property')
これは、nullを許可するmodel2への左結合外部キーを生成します。