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 중국어 웹사이트의 기타 관련 기사를 참조하세요!