WHERE 절의 컬럼에일리어스 참조
SELECT logcount, logUserID, maxlogtm
, DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff
FROM statslogsummary
WHERE daysdiff > 120
나는 이해한다
"column name daysdiff" 입니다.
Maxlogtm은 datetime 필드입니다.그건 날 미치게 하는 사소한 것들이야.
SELECT
logcount, logUserID, maxlogtm,
DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff
FROM statslogsummary
WHERE ( DATEDIFF(day, maxlogtm, GETDATE() > 120)
일반적으로 필드 에일리어스를 참조할 수 없습니다.WHERE
절을 클릭합니다.(전체라고 생각해 주세요).SELECT
에일리어스 포함, 에일리어스 포함,WHERE
절)을 참조해 주세요.
그러나 다른 답변에서 언급했듯이 SQL이 강제로 처리하도록 할 수 있습니다.SELECT
전에 처리되다WHERE
절을 클릭합니다.이것은 보통 논리적인 조작 순서를 강제하기 위해 괄호를 사용하거나 Common Table Expression(CTE; 공통 테이블 표현)을 사용하여 수행합니다.
괄호/하위 선택:
SELECT
*
FROM
(
SELECT
logcount, logUserID, maxlogtm,
DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff
FROM statslogsummary
) as innerTable
WHERE daysdiff > 120
또는 동일한 CTE 버전에 대한 Adam의 답변을 참조하십시오.
에일리어스를 사용하는 경우WHERE
clause는 서브셀렉트로 랩해야 합니다.또는 CTE:
WITH LogDateDiff AS
(
SELECT logcount, logUserID, maxlogtm
, DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff
FROM statslogsummary
)
SELECT logCount, logUserId, maxlogtm, daysdiff
FROM LogDateDiff
WHERE daysdiff > 120
코드를 반복하지 않고 실행하는 가장 효과적인 방법은 WHERE 대신 HADING을 사용하는 것입니다.
SELECT logcount, logUserID, maxlogtm
, DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff
FROM statslogsummary
HAVING daysdiff > 120
CTE의 모든 컬럼을 나열하지 않을 경우 다음을 사용하는 방법도 있습니다.
select
s.logcount, s.logUserID, s.maxlogtm,
a.daysdiff
from statslogsummary as s
outer apply (select datediff(day, s.maxlogtm, getdate()) as daysdiff) as a
where a.daysdiff > 120
서브쿼리(Mysql에서는 가능)를 사용하는 것은 어떻습니까?
SELECT * from (SELECT logcount, logUserID, maxlogtm
, DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff
FROM statslogsummary) as 'your_alias'
WHERE daysdiff > 120
HADING은 다음 문서에 따라 MySQL에서 작동합니다.
집계 함수에서 WHERE 키워드를 사용할 수 없기 때문에 HAVING 절이 SQL에 추가되었습니다.
열 별칭을 참조할 수 있지만 다음을 사용하여 정의해야 합니다.CROSS/OUTER APPLY
:
SELECT s.logcount, s.logUserID, s.maxlogtm, c.daysdiff
FROM statslogsummary s
CROSS APPLY (SELECT DATEDIFF(day, s.maxlogtm, GETDATE()) AS daysdiff) c
WHERE c.daysdiff > 120;
장점:
- 표현의 단일 정의(유지/복사가 필요 없음)
- CTE/외부 쿼리를 사용하여 쿼리 전체를 정리할 필요가 없습니다.
- 참조할 가능성
WHERE/GROUP BY/ORDER BY
- 성능 향상 가능성(단일 실행)
WHERE 절에서 ALIAS를 사용하는 가장 간단한 방법은 하위 쿼리를 만들고 대신 하위 쿼리를 선택하는 것입니다.
예:
WITH Q1 AS (
SELECT LENGTH(name) AS name_length,
id,
name
FROM any_table
)
SELECT id, name, name_length FROM Q1 WHERE name_length > 0
CASE WHEN과 비슷한 모습으로 여기에 와서 다음과 같은 사용을 끝냈습니다.WHERE (CASE WHEN COLUMN1=COLUMN2 THEN '1' ELSE '0' END) = 0
아마 너는 이용할 수 있을 것이다DATEDIFF
에서WHERE
직접적으로.예를 들어 다음과 같습니다.
SELECT logcount, logUserID, maxlogtm
FROM statslogsummary
WHERE (DATEDIFF(day, maxlogtm, GETDATE())) > 120
언급URL : https://stackoverflow.com/questions/8370114/referring-to-a-column-alias-in-a-where-clause
'programing' 카테고리의 다른 글
기존 테이블에서 열을 제거하려면 어떻게 해야 합니까? (0) | 2023.04.07 |
---|---|
SQL Server의 add column 문에 명명된 기본 제약 조건을 만들 수 있습니까? (0) | 2023.04.07 |
Common Table Expressions에 대해 중첩된 WITH 절을 만들 수 있습니까? (0) | 2023.04.07 |
SQL Server 설치 - 설치 미디어 폴더란? (0) | 2023.04.07 |
SELECT 문장에서 NOLOCK 힌트의 효과 (0) | 2023.04.07 |