>데이터 베이스 >MySQL 튜토리얼 >내 SQL 쿼리에서 '다중 부분 식별자를 바인딩할 수 없습니다.' 오류가 발생하는 이유는 무엇입니까?

내 SQL 쿼리에서 '다중 부분 식별자를 바인딩할 수 없습니다.' 오류가 발생하는 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2025-01-17 03:46:11708검색

Why Does My SQL Query Produce a

"다중 부분 식별자를 바인딩할 수 없습니다." 오류 해결

SQL 쿼리 오류 "멀티파트 식별자 'a.maxa'를 바인딩할 수 없습니다."는 암시적 조인과 명시적 조인을 혼합할 때 충돌이 발생함을 나타냅니다. 자세한 설명은 다음과 같습니다.

암시적 조인과 명시적 조인 혼합

제공된 쿼리에는 암시적 조인(쉼표로 구분된 테이블)과 명시적 조인(JOIN 키워드)이 모두 사용됩니다. 이는 허용되지만 바인딩 문제를 방지하려면 신중하게 처리해야 합니다.

연결 우선순위 이해

명시적 연결이 암시적 연결보다 우선합니다. 이는 JOIN 키워드를 사용하여 지정된 조인이 암시적 조인보다 먼저 수행됨을 의미합니다.

잘못된 별칭 참조

귀하의 쿼리에서는 테이블 a와 b 사이의 명시적 조인 결과와 다른 테이블 dkcd 사이에 암시적 조인을 수행하려고 합니다. 그러나 명시적 조인의 우선 순위로 인해 dkcd의 ON 절을 사용하여 a.maxa를 참조하려고 하면 테이블 a를 사용할 수 없습니다. 여기서 오류 메시지가 발생합니다.

쿼리 다시 작성

이 문제를 해결하려면 일관된 조인 구문을 사용하여 쿼리를 다시 작성해야 합니다. 한 가지 가능한 해결책은 명시적 조인을 사용하는 것입니다.

<code class="language-sql">SELECT DISTINCT
  a.maxa,
  b.mahuyen,
  a.tenxa,
  b.tenhuyen,
  ISNULL(dkcd.tong, 0) AS tongdkcd
FROM phuongxa AS a
INNER JOIN quanhuyen AS b ON LEFT(a.maxa, 2) = b.mahuyen
LEFT OUTER JOIN (
  SELECT
    maxa,
    COUNT(*) AS tong
  FROM khaosat
  WHERE CONVERT(datetime, ngaylap, 103) BETWEEN '2011年9月1日' and '2011年9月5日'
  GROUP BY maxa
) AS dkcd ON dkcd.maxa = a.maxa
WHERE a.maxa  '99'
ORDER BY a.maxa;</code>

이 쿼리에서는 모든 조인이 명시적이며 테이블 이름은 모든 경우에 별칭을 사용하여 한정됩니다. 이렇게 하면 dkcd의 ON 절에 있는 a.maxa에 대한 참조가 유효해집니다.

ORDER BY 절 설명

@Aaron Bertrand가 제안한 대로 ORDER BY 절에서 특정 별칭 a로 maxa를 한정하는 것이 좋습니다.

<code class="language-sql">ORDER BY a.maxa;</code>

이렇게 하면 올바른 열에서 정렬이 수행됩니다. 날짜 형식도 이해하기 쉽도록 조정되었습니다.

위 내용은 내 SQL 쿼리에서 '다중 부분 식별자를 바인딩할 수 없습니다.' 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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