ホームページ >データベース >mysql チュートリアル >結合構文を混合すると MySQL が「ON 句の不明な列」エラーをスローするのはなぜですか?
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 サイトの他の関連記事を参照してください。