2

今日、私は外部結合でMySQLドキュメントを読んでいました.外部結合が行われると、特定の条件がnull拒否されることがわかりました

T1 LEFT JOIN T2 ON T1.A=T2.A

これらのような条件は null-rejected です:(docs original docsから理解できません)

T2.B IS NOT NULL,
T2.B > 3,
T2.C <= T1.C,
T2.B < 2 OR T2.C > 1

誰でも簡単な言葉で説明できますか。

  1. これらの条件が拒否される理由
  2. 一部の条件が拒否された場合、クエリによって生成される出力にどのような影響がありますか。
4

1 に答える 1

4

「null-rejected」条件に関するこの説明は、必要以上に複雑なクエリの最適化に関するものです。クエリの動作はまったく変更されません。

次のクエリを検討してください。

select * from table1
    left outer join table2 on table1.id=table2.id
    where table2.id is not null

このクエリは外部結合として記述されていますが、table2 が null である行も破棄されます ( null 拒否条件は、wherenull の行を除外する句の条件です)。

このクエリのwhere句は、外部結合からの「外部行」をすべて拒否します。これは、実際にはまったく外部結合ではないことを意味します。次のように書き換えることができます。

select * from table1
    inner join table2 on table1.id=table2.id

MySQL はこの状況を認識し、外部結合を実行して行を破棄する余分な作業をすべて実行するのではなく、単純化されたクエリに自動的に最適化します。

于 2013-06-07T11:26:07.803 に答える