[SQL] MySQL의 쿼리의 FROM 절에서 오류가 발생 WHERE에 열 별칭을 사용하여
SQLMySQL의 쿼리의 FROM 절에서 오류가 발생 WHERE에 열 별칭을 사용하여
그러나 나는이 오류가있어 다음과 같이 내가 실행 해요 쿼리는 다음과 같습니다
SELECT `users`.`first_name`, `users`.`last_name`, `users`.`email`,
SUBSTRING(`locations`.`raw`,-6,4) AS `guaranteed_postcode`
FROM `users` LEFT OUTER JOIN `locations`
ON `users`.`id` = `locations`.`user_id`
WHERE `guaranteed_postcode` NOT IN #this is where the fake col is being used
(
SELECT `postcode` FROM `postcodes` WHERE `region` IN
(
'australia'
)
)
내 질문은 : 왜 같은 DB 쿼리의 where 절에 가짜 열을 사용할 수 없습니다입니까?
해결법
-
==============================
1.당신은 GROUP BY, ORDER BY 또는 HAVING 절에 열 별칭을 사용할 수 있습니다.
당신은 GROUP BY, ORDER BY 또는 HAVING 절에 열 별칭을 사용할 수 있습니다.
MySQL의 문서에서 복사
코멘트에 지적한 바와 같이, 일을 할 수있는 대신 사용. WHERE하지만 HAVING 대 이것 읽기를 제공해야합니다.
-
==============================
2.빅터가 지적했듯이, 문제는 별명입니다. 이것은 WHERE X의 Y 절에 직접 표현을 넣어,하지만 피할 수 있습니다 :
빅터가 지적했듯이, 문제는 별명입니다. 이것은 WHERE X의 Y 절에 직접 표현을 넣어,하지만 피할 수 있습니다 :
SELECT `users`.`first_name`,`users`.`last_name`,`users`.`email`,SUBSTRING(`locations`.`raw`,-6,4) AS `guaranteed_postcode` FROM `users` LEFT OUTER JOIN `locations` ON `users`.`id` = `locations`.`user_id` WHERE SUBSTRING(`locations`.`raw`,-6,4) NOT IN #this is where the fake col is being used ( SELECT `postcode` FROM `postcodes` WHERE `region` IN ( 'australia' ) )
그러나, 나는 서브 쿼리가 외부 쿼리의 모든 행에 대해 실행해야하기 때문에 이것은 매우 비효율적이다 같아요.
-
==============================
3.표준 SQL (또는 MySQL은) WHERE 절 때문에에 열 별칭의 사용을 허용하지 않습니다
표준 SQL (또는 MySQL은) WHERE 절 때문에에 열 별칭의 사용을 허용하지 않습니다
(MySQL의 문서에서). 당신이 할 수있는 것은 변수의 값을 저장, WHERE 절에 열 값을 계산하고 필드 목록에서 사용할 수 있습니다. 예를 들어, 당신은이 작업을 수행 할 수 있습니다 :
SELECT `users`.`first_name`, `users`.`last_name`, `users`.`email`, @postcode AS `guaranteed_postcode` FROM `users` LEFT OUTER JOIN `locations` ON `users`.`id` = `locations`.`user_id` WHERE (@postcode := SUBSTRING(`locations`.`raw`,-6,4)) NOT IN ( SELECT `postcode` FROM `postcodes` WHERE `region` IN ( 'australia' ) )
이것은 복잡 늘어 나면 유지하기 위해 코드를 더 쉽게, 표현을 반복 피할 수 있습니다.
-
==============================
4.어쩌면 내 대답은 너무 늦기 그러나 이것은 다른 사람을 도울 수 있습니다.
어쩌면 내 대답은 너무 늦기 그러나 이것은 다른 사람을 도울 수 있습니다.
당신은 다른 선택 문을 넣어서 거기에 where 절을 사용할 수 있습니다.
SELECT * FROM (Select col1, col2,...) as t WHERE t.calcAlias > 0
calcAlias 계산 된 별명 열이다.
-
==============================
5.당신은 SELECT 필드와 별칭을 기준으로 필터 HAVING 절을 사용할 수 있습니다
당신은 SELECT 필드와 별칭을 기준으로 필터 HAVING 절을 사용할 수 있습니다
-
==============================
6.나는 MySQL은 5.5.24 다음과 같은 코드가 작동을 사용하고 있습니다 :
나는 MySQL은 5.5.24 다음과 같은 코드가 작동을 사용하고 있습니다 :
select * from ( SELECT `users`.`first_name`, `users`.`last_name`, `users`.`email`, SUBSTRING(`locations`.`raw`,-6,4) AS `guaranteed_postcode` FROM `users` LEFT OUTER JOIN `locations` ON `users`.`id` = `locations`.`user_id` ) as a WHERE guaranteed_postcode NOT IN --this is where the fake col is being used ( SELECT `postcode` FROM `postcodes` WHERE `region` IN ( 'australia' ) )
-
==============================
7.표준 SQL 절 A의 WHERE 컬럼 별칭에 대한 참조를 허용하지 않습니다. WHERE 절가 평가 될 때, 열 값은 아직 결정되지 않을 수 있기 때문에 이러한 제한이 부과된다. 예를 들어, 다음 쿼리는 불법입니다 :
표준 SQL 절 A의 WHERE 컬럼 별칭에 대한 참조를 허용하지 않습니다. WHERE 절가 평가 될 때, 열 값은 아직 결정되지 않을 수 있기 때문에 이러한 제한이 부과된다. 예를 들어, 다음 쿼리는 불법입니다 :
SELECT 번호, COUNT (*) AS CNT FROM tbl_name를 WHERE CNT> ID GROUP BY 0;
-
==============================
8.당신은 어디 조건 SUBSTRING (locations.raw를, -6,4)를 사용할 수 있습니다
당신은 어디 조건 SUBSTRING (locations.raw를, -6,4)를 사용할 수 있습니다
SELECT `users`.`first_name`, `users`.`last_name`, `users`.`email`, SUBSTRING(`locations`.`raw`,-6,4) AS `guaranteed_postcode` FROM `users` LEFT OUTER JOIN `locations` ON `users`.`id` = `locations`.`user_id` WHERE SUBSTRING(`locations`.`raw`,-6,4) NOT IN #this is where the fake col is being used ( SELECT `postcode` FROM `postcodes` WHERE `region` IN ( 'australia' ) )
from https://stackoverflow.com/questions/942571/using-column-alias-in-where-clause-of-mysql-query-produces-an-error by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] MySQL의 LIKE IN ()? (0) | 2020.03.10 |
---|---|
[SQL] SQL에서 100 년 달력 테이블을 만드는 방법 [마감] (0) | 2020.03.10 |
[SQL] SQL Server의 계산 중간에 기능 (0) | 2020.03.10 |
[SQL] SQL Server의 숫자, 부동 소수점과 소수의 차이 (0) | 2020.03.10 |
[SQL] 왼쪽 외부는 내 왼쪽 테이블에서 모든 행을 반환하지 않습니다하세요? (0) | 2020.03.10 |