> 데이터 베이스 > MySQL 튜토리얼 > MySQL 쿼리에서 ''on 절'의 알 수 없는 열 'p.id'' 오류가 발생하는 이유는 무엇입니까?

MySQL 쿼리에서 ''on 절'의 알 수 없는 열 'p.id'' 오류가 발생하는 이유는 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2025-01-13 09:58:43
원래의
130명이 탐색했습니다.

Why am I getting an

MySQL 쿼리의 "알 수 없는 열" 오류

MySQL에서 조인과 관련된 쿼리를 실행할 때 "ON 절의 알 수 없는 열 'p.id'" 오류가 발생할 수 있습니다. 이 오류의 원인을 이해하기 위해 쿼리와 해당 데이터베이스 해석을 자세히 살펴보겠습니다.

쿼리 설명:

문제의 쿼리는 다음과 같습니다.

<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, 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</code>
로그인 후 복사

이 오류는 ANSI-89와 ANSI-92 스타일 조인을 혼합하여 발생하며 이로 인해 모호성이 발생할 수 있습니다. ANSI-89 구문에서는 조인이 쉼표로 표시되는 반면, ANSI-92에서는 JOIN 키워드가 사용됩니다.

오류 설명:

데이터베이스는 쿼리를 다음과 같이 해석합니다.

<code class="language-sql">FROM property p, (
    propertygeometry pg
    JOIN shortlist sl ON sl.PropertyID = p.id AND sl.MemberID = 384216
    ...
)</code>
로그인 후 복사

이 해석에서 테이블 p는 propertygeometry pg와 쉼표로 구분된 조인 전에 선언되지 않습니다. 따라서 데이터베이스는 후속 조인에서 ON 조건을 평가할 때 p.id 열을 찾을 수 없습니다.

해결책:

이 오류를 해결하려면 항상 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 절'의 알 수 없는 열 'p.id'' 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿