[解決済み] MySQLのON句の不明なカラム
2022-02-06 14:52:45
質問
次のようなMySQLのクエリがあります。
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
そして、こんなエラーが出ました。
#1054 - 'on 節' にある 'p.id' という列が不明です。
クエリが正しいように見えるのですが、何が間違っているのでしょうか?
解決方法は?
ANSI-89形式とANSI-92形式の結合を混在させないでください。これらは優先順位が異なるため、混乱したエラーにつながる可能性があり、今回もそうなっています。クエリーは次のように解釈されます。
FROM property p, (
propertygeometry pg
JOIN shortlist sl ON sl.PropertyID = p.id AND sl.MemberID = 384216
...
)
上記では、カンマ形式の結合が考慮される前に、JOINキーワードを使用した結合が最初に評価されます。その時点でテーブル
p
はまだ宣言されていない。
から MySQLマニュアル :
ただし、カンマ演算子の優先順位は、INNER JOIN、CROSS JOIN、LEFT JOINなどよりも低くなっています。結合条件があるときにカンマ結合と他の結合型を混在させると、次のようなエラーが発生します。 on節」の不明な列「col_name」。 が発生することがあります。この問題への対処については、このセクションの後半で説明します。
おすすめは 常に ANSI-92スタイルの結合、つまりJOINキーワードを使用することです。
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
関連する
関連
-
[解決済み] 2つの列を分割するには?
-
[解決済み] ORA-01821: ISO 8601 のローカルタイム付き日付のフォーマットが認識されないエラー
-
[解決済み] MySQLでdatetimeとtimestampのどちらのデータ型を使用すべきですか?
-
[解決済み] MySQLでコマンドラインを使用してSQLファイルをインポートするにはどうすればよいですか?
-
[解決済み] MySQLのAUTO_INCREMENTをリセットする方法
-
[解決済み] MySQLの複数行を1つのフィールドに連結することはできますか?
-
[解決済み] INNER JOIN ON vs WHERE句
-
[解決済み] MySql でクエリ実行時に only_full_group_by に関連するエラーが発生する。
-
[解決済み】SQL Serverで既存のテーブルにデフォルト値を持つカラムを追加する
-
[解決済み] SELECTリストがGROUP BY句になく、非集計カラムを含む ... sql_mode=only_full_group_by と互換性がない。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】 "指定された集約関数を含まないクエリを実行しようとしました。"
-
[解決済み】オペランド型の衝突:intはdateと互換性がない + INSERT文はFOREIGN KEY制約と衝突した
-
[解決済み] 3を挿入すると「ORA-01438: この列で許容される指定精度より大きい値」と表示される。
-
[解決済み】一括読み込みデータ変換エラー(指定されたコードページに対して型の不一致または無効な文字)1行目4列目(年)について)
-
[解決済み] テスト
-
[解決済み] INSERT ステートメントが FOREIGN KEY 制約と競合する - SQL Server
-
[解決済み] INSERT ステートメントが FOREIGN KEY 制約と競合する - SQL Server
-
[解決済み] SQLクエリで2つの列から値を引き算する
-
[解決済み] 集計を行わずに行から列へピボット移動する
-
[解決済み] マルチパート識別子をバインドできなかった