집 >데이터 베이스 >MySQL 튜토리얼 >MySQL에서 ANSI JOIN과 쉼표로 구분된 테이블을 혼합하면 '알 수 없는 열' 오류가 발생하는 이유는 무엇입니까?
MySQL 쿼리에서 ANSI JOIN과 쉼표로 구분된 테이블을 혼합하여 사용할 때 발생하는 문제
MySQL 쿼리에서 ANSI JOIN 구문(INNER JOIN, CROSS JOIN, LEFT JOIN)과 쉼표로 구분된 테이블 참조를 혼합하면 "알 수 없는 열" 오류가 발생할 수 있습니다. 이 오류는 MySQL의 쉼표 연산자 해석이 위치에 따라 다르기 때문에 발생합니다.
질문:
다음 쿼리를 고려해 보세요.
<code class="language-sql">SELECT m.*, t.* FROM memebers as m, telephone as t INNER JOIN memeberFunctions as mf ON m.id = mf.memeber INNER JOIN mitgliedTelephone as mt ON m.id = mt.memeber WHERE mf.function = 32</code>
이 쿼리는 'on 절'의 알 수 없는 열 'm.id'' 오류를 발생시킵니다.
해결책:
이 오류를 해결하려면 ANSI JOIN 구문을 쉼표로 구분된 테이블과 혼합하지 마세요. 대신 아래 수정된 쿼리에 표시된 대로 ANSI JOIN 구문만 사용하세요.
<code class="language-sql">SELECT m.*, t.* FROM memebers as m JOIN telephone as t ON 1=1 INNER JOIN memeberFunctions as mf ON m.id = mf.memeber AND mf.function = 32 INNER JOIN mitgliedTelephone as mt ON m.id = mt.memeber</code>
설명:
이제 MySQL은 쿼리를 다음과 같이 해석합니다.
<code class="language-sql">((memembers as m JOIN telephone as t ON 1=1) INNER JOIN memeberFunctions as mf ON m.id = mf.memeber) INNER JOIN mitgliedTelephone as mt ON m.id = mt.memeber</code>
이 구문에서는 JOIN 절의 피연산자가 명확하게 정의되고 "m.id" 열이 ON 절에서 올바르게 참조됩니다. ON 1=1
키워드에는 JOIN
절이 필요하므로 JOIN
작업의 정확성을 보장하기 위해 ON
가 추가되었습니다.
참고:
MySQL에서는 쉼표를 사용하여 테이블을 구분하는 것이 더 이상 모범 사례로 간주되지 않는다는 점에 유의하는 것이 중요합니다. 명확성을 보장하고 잠재적인 오류를 방지하려면 ANSI JOIN 구문을 사용하는 것이 좋습니다.
위 내용은 MySQL에서 ANSI JOIN과 쉼표로 구분된 테이블을 혼합하면 '알 수 없는 열' 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!