SQL WHERE 절 및 계산 열: 일반적인 함정
SQL에서는 날짜 차이 등 열과 관련된 계산을 기반으로 데이터를 필터링해야 하는 경우가 많습니다. 그러나 WHERE
절 내에서 열 별칭을 직접 사용하면 "잘못된 열 이름" 오류가 자주 발생합니다. 이는 SQL이 SELECT
절 전에 WHERE
문을 처리하기 때문입니다. 이는 WHERE
절에서 별칭을 사용하려고 할 때 별칭이 아직 정의되지 않았음을 의미합니다.
다음 예를 고려해보세요.
<code class="language-sql">SELECT logcount, logUserID, maxlogtm, DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff FROM statslogsummary WHERE daysdiff > 120;</code>
실패합니다.
두 가지 효과적인 솔루션은 다음과 같습니다.
1. 하위 쿼리(또는 괄호): 값 사전 계산
SQL이 계산을 먼저 평가하도록 하려면 계산을 괄호로 묶으세요.
<code class="language-sql">SELECT logcount, logUserID, maxlogtm, DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff FROM statslogsummary WHERE (DATEDIFF(day, maxlogtm, GETDATE()) > 120);</code>
괄호는 하위 쿼리를 생성하여 daysdiff
절에 WHERE
을 사용할 수 있도록 합니다.
2. 공통 테이블 표현식(CTE): 임시 테이블 정의
CTE는 명명된 임시 결과 집합을 제공하므로 계산된 열을 보다 명확하게 참조할 수 있습니다.
<code class="language-sql">WITH logDiff AS ( SELECT logcount, logUserID, maxlogtm, DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff FROM statslogsummary ) SELECT logcount, logUserID, maxlogtm, daysdiff FROM logDiff WHERE daysdiff > 120;</code>
CTE logDiff
는 daysdiff
을 미리 계산하여 기본 쿼리의 WHERE
절에서 액세스할 수 있도록 합니다. 이 접근 방식은 특히 복잡한 계산의 경우 가독성과 유지 관리성을 향상시킵니다.
위 내용은 SQL WHERE 절에서 계산된 열을 어떻게 사용할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!