[SQL] WHERE 절에 열 별칭을 참조
SQLWHERE 절에 열 별칭을 참조
SELECT logcount, logUserID, maxlogtm
, DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff
FROM statslogsummary
WHERE daysdiff > 120
나는 얻다
Maxlogtm는 날짜 필드입니다. 그것은 그 날 드라이브 미친 작은 물건.
해결법
-
==============================
1.
SELECT logcount, logUserID, maxlogtm, DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff FROM statslogsummary WHERE ( DATEDIFF(day, maxlogtm, GETDATE() > 120)
일반적으로 당신은 WHERE 절에 필드 별칭을 참조 할 수 없습니다. (WHERE 절 후에 적용되며, 전체 별칭 포함 SELECT이라고 생각.)
그러나, 다른 답변에서 언급 한 바와 같이, 당신은 선택을 치료하기 위해 SQL을 강제 할 수있는 WHERE 절을하기 전에 처리 할 수 있습니다. 이것은 일반적으로 작업 또는 공통 테이블 식 (CTE)와 논리적 순서를 강제로 괄호로 이루어집니다 :
괄호 / 부속 :
SELECT * FROM ( SELECT logcount, logUserID, maxlogtm, DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff FROM statslogsummary ) as innerTable WHERE daysdiff > 120
또는 동일의 CTE 버전에 대한 아담의 답변을 참조하십시오.
-
==============================
2.당신이 당신의 WHERE 절에 별칭을 사용하려는 경우, 당신은 선택하거나 CTE 하위에 포장해야합니다
당신이 당신의 WHERE 절에 별칭을 사용하려는 경우, 당신은 선택하거나 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
-
==============================
3.코드를 반복하지 않고 그것을 할 수있는 가장 효과적인 방법은 대신 WHERE의 HAVING의 사용이다
코드를 반복하지 않고 그것을 할 수있는 가장 효과적인 방법은 대신 WHERE의 HAVING의 사용이다
SELECT logcount, logUserID, maxlogtm , DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff FROM statslogsummary HAVING daysdiff > 120
-
==============================
4.당신이 CTE에서 모든 열을 표시하지 않으려면,이 작업을 수행하는 또 다른 방법이 적용 외부 사용하는 것입니다 :
당신이 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
-
==============================
5.어떻게 (이 MySQL의에서 나를 위해 일한) 하위 쿼리를 사용하는 방법에 대한?
어떻게 (이 MySQL의에서 나를 위해 일한) 하위 쿼리를 사용하는 방법에 대한?
SELECT * from (SELECT logcount, logUserID, maxlogtm , DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff FROM statslogsummary) as 'your_alias' WHERE daysdiff > 120
-
==============================
6.MySQL은 HAVING 작품 문서에 따라 :
MySQL은 HAVING 작품 문서에 따라 :
-
==============================
7.당신은 열 별칭을 참조 할 수 있지만 적용 CROSS / OUTER를 사용하여 정의해야합니다 :
당신은 열 별칭을 참조 할 수 있지만 적용 CROSS / OUTER를 사용하여 정의해야합니다 :
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;
DB 휘티 d 혀라도
장점 :
-
==============================
8.여기에 온 것과 유사한 무언가를 찾고 있지만, CASE로를 사용하여 끝났을 때, 어디에서이 같은 : WHERE (CASE WHEN COLUMN1 = COLUMN2 THEN '1'ELSE '0'END) 0 어쩌면 당신은 WHERE 직접에 DATEDIFF를 사용할 수 = . 뭔가 같은 :
여기에 온 것과 유사한 무언가를 찾고 있지만, CASE로를 사용하여 끝났을 때, 어디에서이 같은 : WHERE (CASE WHEN COLUMN1 = COLUMN2 THEN '1'ELSE '0'END) 0 어쩌면 당신은 WHERE 직접에 DATEDIFF를 사용할 수 = . 뭔가 같은 :
SELECT logcount, logUserID, maxlogtm FROM statslogsummary WHERE (DATEDIFF(day, maxlogtm, GETDATE())) > 120
from https://stackoverflow.com/questions/8370114/referring-to-a-column-alias-in-a-where-clause by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 일대일, 일대 설계 테이블 동안 관계 및 다 대다을 구현하는 방법? (0) | 2020.03.12 |
---|---|
[SQL] 코드에 비해 저장 프로세서 수에 SQL을 유지하는 장점과 단점은 무엇입니까 [마감] (0) | 2020.03.12 |
[SQL] WHERE HAVING 대 (0) | 2020.03.12 |
[SQL] 오라클 (? 테이블에 갱신 또는 삽입) 방법 UPSERT에 (0) | 2020.03.12 |
[SQL] 테스트에 가장 좋은 방법은 행은 MySQL의 테이블에 존재하는 경우 (0) | 2020.03.12 |