別の表の id を並べて同名になる例
2 つの表から同じ名前の列 id を選ぶと、出力列が同名になります。サブクエリや CTE として使うと曖昧になる典型的な落とし穴を、警告で確かめます。
入力
SQL
SELECT a.id, b.id FROM a JOIN b ON a.id = b.a_id
結果
エラー 0 件・警告 1 件・情報 0 件
指摘(エラー・警告・情報)
- 警告 1 行目 出力列名 id が 2 個あります(1 番目・2 番目)。サブクエリや CTE として参照すると、どの列か曖昧になるため、AS で別の名前を付けてください。
| 出力列の数 | 2 列 |
|---|---|
| 同名の出力列の組 | 1 組 |
| 名前を判定できなかった列 | 0 列 |
出力列の一覧
| # | 式 | 出力列名 | 名前の決まり方 |
|---|---|---|---|
| 1 | a.id | id | 列参照なので、その列の名前 |
| 2 | b.id | id | 列参照なので、その列の名前 |
検算(この結果になる理由)
修飾名 a.id も b.id も単純な列参照なので、どちらの出力名も id です(SELECT 文書「SELECT List」)。同名の列が 2 つできるため、AS で別の名前を付けるよう警告が 1 件出ます。
判定の根拠は仕様と根拠に、仕様の出典とともにまとめています。自分の入力で試すにはツールをお使いください。
このツールの制約
- 完全な SQL の構文解析はしません。サブクエリ・CTE(WITH 句)・UNION を含む問い合わせは、最初の SELECT の選択リストだけを調べるか、判定不能と表示します。
- * や t.* は表の定義で列が決まるため、展開後の列名は判定せず「全列」と表示します。
- 型変換の ::型 を含む式や、サブクエリを式に使った項目の出力名は判定不能と表示します。
- AS を省いた別名は、末尾の名前を別名と読む簡易な規則です。キーワードと同じ名前の別名は AS が必要になる点に注意してください。
ご利用にあたって
- 結果は字句の読み取りにもとづく確認で、実際のデータベースでの解釈を保証するものではありません。
- ドキュメントは PostgreSQL License で公開されています。このサイトはその内容を要約して参照しており、転載はしていません。