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

내 SQL 쿼리가 '다중 부분 식별자 'a.maxa'를 바인딩할 수 없습니다'를 반환하는 이유는 무엇입니까?

Susan Sarandon
풀어 주다: 2025-01-17 03:31:08
원래의
892명이 탐색했습니다.

Why Does My SQL Query Return

SQL 오류 "멀티파트 식별자 'a.maxa'를 바인딩할 수 없습니다."에 대한 종합 분석 및 해결

SQL 쿼리에서 "다중 부분 식별자 'a.maxa'를 바인딩할 수 없습니다." 오류는 일반적으로 암시적 조인과 명시적 조인 간의 충돌로 인해 발생합니다. 이 오류를 방지하려면 이 두 가지 연결 유형의 우선순위와 동작을 이해하는 것이 중요합니다.

암시적 조인(쉼표 조인)은 WHERE 절에 조인 조건을 지정합니다. 명시적 조인(JOIN 키워드 사용)은 암시적 조인보다 우선합니다.

주어진 쿼리에서 문제는 phuongxa(a)와 quanhuyen(b) 사이의 암시적 조인과 khaosat(dkcd)를 b와 명시적으로 조인하는 것입니다. 쿼리에서는 dkcd를 사용하여 a와 b를 조인할 것으로 예상하지만 실제로 조인은 b와 dkcd 사이에서 먼저 발생합니다. 이 시점에서 a가 아직 dkcd에 조인되지 않았기 때문에 이로 인해 dkcd 조인 조건의 a.maxa에 대한 참조가 유효하지 않게 됩니다.

이 오류를 해결하려면 모든 명시적 조인을 사용하여 쿼리를 다시 작성하는 것이 좋습니다. 예:

<code class="language-sql">SELECT DISTINCT
  a.maxa,
  b.mahuyen,
  a.tenxa,
  b.tenhuyen,
  ISNULL(dkcd.tong, 0) AS tongdkcd
FROM phuongxa a
  INNER JOIN quanhuyen b ON LEFT(a.maxa, 2) = b.mahuyen
  LEFT OUTER JOIN (
    SELECT
      maxa,
      COUNT(*) AS tong
    FROM khaosat
    WHERE CONVERT(datetime, ngaylap, 103) BETWEEN 'Sep 1 2011' AND 'Sep 5 2011'
    GROUP BY maxa
  ) AS dkcd ON dkcd.maxa = a.maxa
WHERE a.maxa <> '99'
ORDER BY a.maxa</code>
로그인 후 복사

이 쿼리는 세 테이블 모두에 대해 명시적 조인을 사용하여 필요한 조인 순서를 보장합니다. 또한 ORDER BY 절에 별칭 a를 사용하여 maxa를 한정하여 정렬의 기반이 되는 테이블의 필드를 명시적으로 지정했습니다.

이러한 오류를 해결하고 효율적인 SQL 쿼리를 작성하려면 명시적 및 암시적 조인의 동작을 이해하는 것이 중요합니다.

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

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