sql >> データベース >  >> RDS >> Mysql

ON句のMySQL不明列

    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、LEFTJOINなどよりも低くなります。結合条件があるときに他の結合タイプとコンマ結合を混在させると、「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
    

    関連:



    1. 次のイベントの日付を表示する

    2. 2つの条件でINSERTINTOまたはUPDATE

    3. Androidアプリにユーザー名とパスワードを保存するための最良のオプション

    4. SQL Server(T-SQL)のパーティション関数のパラメータータイプを確認します