>데이터 베이스 >MySQL 튜토리얼 >MySQL에서 ANSI JOIN과 쉼표로 구분된 테이블을 혼합하면 '알 수 없는 열' 오류가 발생하는 이유는 무엇입니까?

MySQL에서 ANSI JOIN과 쉼표로 구분된 테이블을 혼합하면 '알 수 없는 열' 오류가 발생하는 이유는 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2025-01-09 10:57:41537검색

Why Does Mixing ANSI JOINs and Comma-Separated Tables in MySQL Lead to

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.