ホームページ >データベース >mysql チュートリアル >結合構文を混合すると MySQL が「ON 句の不明な列」エラーをスローするのはなぜですか?

結合構文を混合すると MySQL が「ON 句の不明な列」エラーをスローするのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-13 06:48:42885ブラウズ

Why Does MySQL Throw an

MySQL の「不明な列」エラー: 結合構文の競合について

MySQL の「'on 句' に不明な列 'p.id'」エラーは、結合構文の一貫性のない使用によって発生することがよくあります。 このあいまいさは、ANSI-89 結合スタイルと ANSI-92 結合スタイルの違いに起因します。

ANSI-89 ではカンマを使用して結合を定義しますが、ANSI-92 では明示的な JOIN キーワードを使用します。 これらのスタイルを混合すると、解析エラーが発生します。 元のクエリは両方を誤って組み合わせたため、MySQL は ANSI-92 結合を最初に解釈しました。 その結果、テーブル "p" は、結合条件の ANSI-89 部分で参照されるときに認識されませんでした。

解決策は一貫性を維持することです。 全体で ANSI-92 構文を使用すると、優先順位の問題がなくなり、クエリの読みやすさが向上します。

一貫した ANSI-92 構文を使用した修正されたクエリは次のとおりです。

<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>

このアプローチにより、構文の競合が回避され、クエリがスムーズに実行されます。 明確にしてエラーを防ぐために、常に明示的な JOIN キーワードを使用してください。

以上が結合構文を混合すると MySQL が「ON 句の不明な列」エラーをスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。