ホームページ > データベース > mysql チュートリアル > MySQL クエリで「'on 句' の不明な列 'p.id'」エラーが発生するのはなぜですか?

MySQL クエリで「'on 句' の不明な列 'p.id'」エラーが発生するのはなぜですか?

Mary-Kate Olsen
リリース: 2025-01-13 09:58:43
オリジナル
134 人が閲覧しました

Why am I getting an

MySQL クエリでの「不明な列」エラー

MySQL では、結合を含むクエリを実行すると、「ON 句に不明な列 'p.id'」エラーが発生することがあります。このエラーの原因を理解するために、クエリとそのデータベース解釈を詳しく調べてみましょう。

クエリの説明:

問題のクエリは次のようになります:

<code class="language-sql">SELECT p.*,
    IF(COUNT(ms.PropertyID) > 0,1,0) AS Contacted,
    pm.MediaID,
    date_format(p.AvailableFrom, '%d %b %Y') AS 'AvailableFrom',
    astext(pg.Geometry) AS Geometry
FROM property p, propertygeometry pg
    JOIN shortlist sl ON sl.PropertyID = p.id AND sl.MemberID = 384216
    LEFT JOIN message ms ON ms.PropertyID = p.id AND ms.SenderID = 384216
    LEFT JOIN property_media pm ON pm.PropertyID = p.id AND pm.IsPrimary = 1
WHERE p.paused = 0
    AND p.PropertyGeometryID = pg.id
GROUP BY p.id</code>
ログイン後にコピー

このエラーは、ANSI-89 スタイルの結合と ANSI-92 スタイルの結合が混在していることが原因で、あいまいさが生じる可能性があります。 ANSI-89 構文では結合はカンマで表されますが、ANSI-92 では JOIN キーワードが使用されます。

エラーの説明:

データベースはクエリを次のように解釈します:

<code class="language-sql">FROM property p, (
    propertygeometry pg
    JOIN shortlist sl ON sl.PropertyID = p.id AND sl.MemberID = 384216
    ...
)</code>
ログイン後にコピー

この解釈では、テーブル p は、propertygeometry pg とのカンマ区切り結合の前に宣言されていません。したがって、データベースは後続の結合で ON 条件を評価するときに列 p.id を見つけることができません。

解決策:

このエラーを回避するには、常に ANSI-92 スタイルの結合を使用することをお勧めします。この場合、すべての結合は JOIN キーワードによって明示的に行われます。

<code class="language-sql">SELECT p.*,
    IF(COUNT(ms.PropertyID) > 0,1,0) AS Contacted,
    pm.MediaID,
    date_format(p.AvailableFrom, '%d %b %Y') AS 'AvailableFrom',
    astext(pg.Geometry) AS Geometry
FROM property p
    JOIN propertygeometry pg ON p.PropertyGeometryID = pg.id
    JOIN shortlist sl ON sl.PropertyID = p.id AND sl.MemberID = 384216
    LEFT JOIN message ms ON ms.PropertyID = p.id AND ms.SenderID = 384216
    LEFT JOIN property_media pm ON pm.PropertyID = p.id AND pm.IsPrimary = 1
WHERE p.paused = 0
GROUP BY p.id</code>
ログイン後にコピー

一貫した結合構文を採用することで、あいまいさを回避し、今後のクエリで同様のエラーが発生するのを防ぐことができます。

以上がMySQL クエリで「'on 句' の不明な列 'p.id'」エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート