INNER
の場合、いいえ、順序は関係ありません。選択肢をSELECT *
からSELECT a.*, b.*, c.*
に変更する限り、クエリは同じ結果を返します。 (LEFT
、RIGHT
またはFULL
)については
OUTER
は、はい、受注案件に参加する - 物事がはるかに複雑である(がを更新)して。
a LEFT JOIN b
ON b.ab_id = a.ab_id
LEFT JOIN c
ON c.ac_id = a.ac_id
:
まず
、外部結合は、そうa LEFT JOIN b
は(可換性と結合性)の両方を含んで、あなたの例の特性のため、連想ではありませんどちらかb LEFT JOIN a
外部結合と同じではありません、可換ではありません
と同等です:
a LEFT JOIN c
ON c.ac_id = a.ac_id
LEFT JOIN b
ON b.ab_id = a.ab_id
けど。
a LEFT JOIN b
ON b.ab_id = a.ab_id
LEFT JOIN c
ON c.ac_id = a.ac_id
AND c.bc_id = b.bc_id
と等価ではない:
別の(できれば簡単な)連想例。 (a LEFT JOIN b) LEFT JOIN c
と考える:
a LEFT JOIN b
ON b.ab_id = a.ab_id -- AB condition
LEFT JOIN c
ON c.bc_id = b.bc_id -- BC condition
このはa LEFT JOIN (b LEFT JOIN c)
に同等です:
a LEFT JOIN
b LEFT JOIN c
ON c.bc_id = b.bc_id -- BC condition
ON b.ab_id = a.ab_id -- AB condition
私たちは "素敵" ON
条件を持っているという理由だけで。 ON b.ab_id = a.ab_id
とc.bc_id = b.bc_id
は両方とも等しいチェックであり、NULL
の比較は含まれません。
あなたも、他の演算子と条件を持つことができるなど、より複雑なもの:ON a.x <= b.x
またはON a.x = 7
またはON a.x LIKE b.x
またはON (a.x, a.y) = (b.x, b.y)
と2つのクエリは、まだ相当します。
ただし、IS NULL
のいずれか、またはCOALESCE()
のようなヌルに関連する関数が含まれる場合、たとえば条件がb.ab_id IS NULL
の場合、2つのクエリは同等ではありません。
「」とは何ですか?あなたはAとBとAとCを結合しているのですか、AとBとBとCを結合していますか? –
beny23
こんにちはベニー、私の質問のコードは抽象です。私はAをBまたはAとCに結びつけることに関心がありません。同じ結果が得られるような構文を知りたいだけです。 –