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

結合スタイルを混合すると MySQL が「ON 句の不明な列」をスローするのはなぜですか?

Susan Sarandon
リリース: 2025-01-13 06:43:43
オリジナル
718 人が閲覧しました

Why Does MySQL Throw

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 サイトの他の関連記事を参照してください。

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