ANSI 標準でon
は、 を除くすべての結合タイプに必須ですcross join
。これは、Oracle および他のほとんどのデータベースに適用されます。
MySQL は少し異なります。これは、MySQLドキュメントの構文図です。
join_table:
table_reference [INNER | CROSS] JOIN table_factor [join_condition]
| table_reference STRAIGHT_JOIN table_factor
| table_reference STRAIGHT_JOIN table_factor ON conditional_expr
| table_reference {LEFT|RIGHT} [OUTER] JOIN table_reference join_condition
| table_reference NATURAL [{LEFT|RIGHT} [OUTER]] JOIN table_factor
つまり、MySQL では、on
を に対してオプションにすることはできますが、またはをオプションにすることはできjoin
ません。MySQL はサポートしていません。そして、それをより混乱させるのは、句を受け入れるようなものです。left outer join
right outer join
full outer join
cross join
join
on
また、MySQL 拡張機能は無視してください。 左結合、右結合、および内部結合には 必ず節を使用してください。for 句は使用しないでください。結合に使用されている列で明示的にすることを好むため、これらを使用することを好みます (これについては質問しません)。on
on
cross join
natural join
編集:
SQL Fiddleによると、バージョン 5.6 では動作full outer join
時にエラーが発生しleft outer join
ます。したがって、これはエラーを生成します:
select *
from (select 1 as a) t1 full outer join
(select 2 as b) t2
on t1.a = t2.b;
これもエラーを生成します。
select *
from (select 1 as a) t1 full join
(select 2 as b) t2;
また、MySQL のドキュメント (5.7 まで) はすべて、full join
サポートされていないことを非常に明確に示しています。クエリが機能した理由がわかりません。