ホームページ >データベース >mysql チュートリアル >結合スタイルを混合すると MySQL が「ON 句の不明な列」をスローするのはなぜですか?
MySQL「ON 句の不明な列」エラー: 接続順序の混乱の詳細な説明
MySQL で「#1054 - 'on 句' に不明な列 'p.id'」エラーが発生した場合、重要なのは、クエリ内で ANSI-89 スタイルの結合と ANSI-92 スタイルの結合を混在させることによって生じる潜在的な問題を理解することです。デフォルトでは、MySQL は優先順位に基づいて接続を評価するため、接続順序が明示的に指定されていない場合、混乱が生じる可能性があります。
不正なクエリでは、MySQL はクエリを次のように解釈します。カンマ形式の結合は JOIN キーワード結合の後に評価されます。
<code class="language-sql">FROM property p, ( propertygeometry pg JOIN shortlist sl ON sl.PropertyID = p.id AND sl.MemberID = 384216 ... )</code>
この時点で、MySQL はテーブル "p" が宣言されていないと判断し、「不明な列」エラーを引き起こします。
この混乱を避けるために、クエリ全体で常に 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 句の不明な列」をスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。