NATURAL JOIN とカンマ区切り
NATURAL JOIN とカンマ区切りの表を同じ FROM に並べた例です。条件を書かない結合が 2 種類あることと、それぞれの注意の情報を確かめます。
入力
SQL
SELECT * FROM a NATURAL JOIN b, c WHERE a.id = c.id
結果
エラー 0 件・警告 0 件・情報 2 件
指摘(エラー・警告・情報)
- 情報 1 行目 b は NATURAL JOIN です。両方の表に共通する名前の列すべてで結合され、共通する名前が 1 つもなければ CROSS JOIN と同じ結果になります(7.2.1.1)。列を足したり名前を変えたりすると結合の条件が変わるため、ON か USING の明示が安全です。
- 情報 1 行目 c はカンマで並べた表です。CROSS JOIN と同じで、条件は WHERE に書きます。3 つ以上の表を並べて JOIN と混ぜると、JOIN のほうが強く結び付く点に注意してください(7.2.1.1)。
| 表の数 | 3 個 |
|---|---|
| 結合の数 | 2 個 |
| 外部結合の数 | 0 個 |
JOIN の対応表
| # | 結合の種類 | 表(別名) | 条件の種類 | 条件 |
|---|---|---|---|---|
| 1 | (最初の表) | a | - | - |
| 2 | NATURAL INNER JOIN | b | NATURAL | 共通する名前の列すべて |
| 3 | カンマ(CROSS JOIN 相当) | c | - | - |
検算(この結果になる理由)
NATURAL JOIN は共通する名前の列すべてで結ぶ結合、カンマは CROSS JOIN と同じです(7.2.1.1 節)。どちらも条件の記述は不要なのでエラーはなく、それぞれの注意を述べた情報が 2 件出ます。
判定の根拠は仕様と根拠に、仕様の出典とともにまとめています。自分の入力で試すにはツールをお使いください。
このツールの制約
- 完全な SQL の構文解析はしません。サブクエリや括弧で囲んだ結合の中身は読まず、「(サブクエリ)」「(括弧つきの結合)」として表に出します。
- ON の条件の正しさ(列が存在するか・型が合うか)は判定しません。条件の文字列をそのまま表示します。
- UPDATE ... FROM や DELETE ... USING の結合は対象外で、SELECT 文だけを読みます。
- WITH 句(共通テーブル式)で始まる問い合わせは判定不能と表示します。
ご利用にあたって
- 結果は字句の読み取りにもとづく確認で、実際のデータベースでの解釈を保証するものではありません。
- ドキュメントは PostgreSQL License で公開されています。このサイトはその内容を要約して参照しており、転載はしていません。