「ERROR1054(42S22):「onclause」の不明な列「tab.ColName」のようなエラーが発生した場合 」MariaDBでは、次の3つの原因が考えられます。
- 列は存在しません。
- エイリアス列をその列名で参照しようとしています。
- またはその逆の可能性があります。宣言されたことのないエイリアスで列を参照している可能性があります。
列にエイリアスがある場合、ON
で列を参照するときにそのエイリアスを使用する必要があります 2つ以上のテーブルに対して結合を行う場合の句。逆に、エイリアスで列を参照する場合は、最初にエイリアスが実際に宣言されていることを確認する必要があります。
エラーを生成するコードの例を次に示します。
SELECT
c.CatId,
c.CatName
FROM Cats c
INNER JOIN Dogs d
ON c.DogName = d.DogName;
結果:
ERROR 1054 (42S22): Unknown column 'c.DogName' in 'on clause'
ここで誤ってc.DogName
を使用しました ON
で c.CatName
を使用するつもりだったときの句 。
この場合、修正は簡単です。正しい列名を使用してください:
SELECT
c.CatId,
c.CatName
FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;
エラーを生成するコードの別の例を次に示します。
SELECT
CatId,
CatName
FROM Cats
INNER JOIN Dogs d
ON c.CatName = d.DogName;
結果:
ERROR 1054 (42S22): Unknown column 'c.CatName' in 'on clause'
ここでは、ON
に存在しないエイリアスを参照しました 句。 c.CatName
を使用しました CatName
を参照するには Cats
の列 テーブル。唯一の問題は、Cats
テーブルにはエイリアスがありません。
この問題を修正するには、Cats
のエイリアスを指定するだけです。 テーブル:
SELECT
CatId,
CatName
FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;
または、エイリアスへのすべての参照を削除して、完全なテーブル名を使用することもできます:
SELECT
CatId,
CatName
FROM Cats
INNER JOIN Dogs
ON Cats.CatName = Dogs.DogName;
私が指摘しなければならないことの1つは、この例では、SELECT
の列名にプレフィックスを付けていないことです。 エイリアスのリスト。それを行った場合、同じエラーが表示されますが、メッセージは少し異なります:
SELECT
c.CatId,
c.CatName
FROM Cats
INNER JOIN Dogs d
ON c.CatName = d.DogName;
結果:
ERROR 1054 (42S22): Unknown column 'c.CatId' in 'field list'
この場合、ON
で不明な列が見つかる前に、フィールドリストで不明な列が検出されました。 句。いずれにせよ、解決策は同じです。
エラーを生成するコードの別の例を次に示します。
SELECT
c.CatId,
c.CatName
FROM Cats c
INNER JOIN Dogs d
ON Cats.CatName = d.DogName;
結果:
ERROR 1054 (42S22): Unknown column 'Cats.CatName' in 'on clause'
この場合、Cats
のエイリアスが宣言されています テーブルですが、ON
ではそのエイリアスを使用しませんでした 条項。
ここでの解決策は、テーブル名の代わりにエイリアスを使用することです:
SELECT
c.CatId,
c.CatName
FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;