[SQL] SQL은 where 절에 열 별칭을 인식하지
SQLSQL은 where 절에 열 별칭을 인식하지
나는 SQL 만 초보자,하지만 나는이 짜증나는 오류 건너했습니다. SQL이 스크립트의 WHERE 절에 문제를 가지고있다 :
SELECT
ITEM_ID, ITEM_PRICE, DISCOUNT_AMOUNT, QUANTITY,
(ITEM_PRICE*QUANTITY) AS price_total,
(DISCOUNT_AMOUNT*QUANTITY) AS discount_total,
((ITEM_PRICE-DISCOUNT_AMOUNT)*QUANTITY) AS item_total
FROM ORDER_ITEMS
WHERE item_total > 500
ORDER BY item_total;
이 오류를 수신하고 있습니다 :
Error starting at line : 1 in command -
SELECT
ITEM_ID, ITEM_PRICE, DISCOUNT_AMOUNT, QUANTITY,
(ITEM_PRICE*QUANTITY) AS price_total,
(DISCOUNT_AMOUNT*QUANTITY) AS discount_total,
((ITEM_PRICE-DISCOUNT_AMOUNT)*QUANTITY) AS item_total
FROM ORDER_ITEMS
WHERE item_total > 500
ORDER BY item_total DESC;
Error at Command Line : 7 Column : 7
Error report -
SQL Error: ORA-00904: "ITEM_TOTAL": invalid identifier
00904. 00000 - "%s: invalid identifier"
*Cause:
*Action:
나는 price_total도 discount_total 아무 문제가없는 이유는 모르겠지만, ITEM_TOTAL는 무효로보고있다. 내가 먼저 할인 된 금액을 빼고는 양을 곱하면 500보다 총보다이 항목 만 선택하려합니다. 그럼, ITEM_TOTAL으로 내림차순 결과를 정렬 할 필요가
해결법
-
==============================
1.그래서, 다음 쿼리는 불법입니다 :
그래서, 다음 쿼리는 불법입니다 :
SQL> SELECT empno AS employee, deptno AS department, sal AS salary 2 FROM emp 3 WHERE employee = 7369; WHERE employee = 7369 * ERROR at line 3: ORA-00904: "EMPLOYEE": invalid identifier SQL>
열 별칭이 허용됩니다 :
당신의 열 별칭을 참조 할 수 WHERE 절에 다음과 같은 경우 :
예를 들어,
SQL> SELECT * FROM 2 ( 3 SELECT empno AS employee, deptno AS department, sal AS salary 4 FROM emp 5 ) 6 WHERE employee = 7369; EMPLOYEE DEPARTMENT SALARY ---------- ---------- ---------- 7369 20 800 SQL> WITH DATA AS( 2 SELECT empno AS employee, deptno AS department, sal AS salary 3 FROM emp 4 ) 5 SELECT * FROM DATA 6 WHERE employee = 7369; EMPLOYEE DEPARTMENT SALARY ---------- ---------- ---------- 7369 20 800 SQL>
-
==============================
2.당신은 조회에서 별명 하나로서 사용되는 열 이름을 사용할 수 없습니다
당신은 조회에서 별명 하나로서 사용되는 열 이름을 사용할 수 없습니다
이유:
쿼리 것이다 당시 런타임 먼저 확인 열 이름 "ITEM_TOTAL는"이 어디에 저장되어 있지 않은 별칭으로 제공 되었기 때문에 테이블 "ORDER_ITEMS"에서 발견되지 않고 당신이 원하는 출력에 해당 열을 지정하는 경우에만
번갈아 하는:
당신은 서브가 그것의 성능이 좋지 않은 쿼리 유형의 이동을 사용하고자하지만 다른 방법 중 하나 인 경우
SELECT * FROM (SELECT ITEM_ID, ITEM_PRICE, DISCOUNT_AMOUNT, QUANTITY, (ITEM_PRICE*QUANTITY) AS price_total, (DISCOUNT_AMOUNT*QUANTITY) AS discount_total, ((ITEM_PRICE-DISCOUNT_AMOUNT)*QUANTITY) AS item_total FROM ORDER_ITEMS) as tbl WHERE tbl.item_total > 500 ORDER BY tbl.item_total;
-
==============================
3.당신은 CROSS 표현을 정의하는 데 적용 사용할 수있는 오라클 12C에서 시작하고 어디에서 그들에게 참조 할 수 절 :
당신은 CROSS 표현을 정의하는 데 적용 사용할 수있는 오라클 12C에서 시작하고 어디에서 그들에게 참조 할 수 절 :
SELECT o.ITEM_ID, o.ITEM_PRICE, o.DISCOUNT_AMOUNT, o.QUANTITY, s.price_total, s.discount_total, s.item_total FROM ORDER_ITEMS o CROSS APPLY (SELECT ITEM_PRICE*QUANTITY AS price_total, DISCOUNT_AMOUNT*QUANTITY AS discount_total, (ITEM_PRICE-DISCOUNT_AMOUNT)*QUANTITY AS item_total FROM dual) s WHERE s.item_total > 500 ORDER BY s.item_total;
from https://stackoverflow.com/questions/28802134/sql-not-recognizing-column-alias-in-where-clause by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] PostgreSQL의 9.3을 사용하여 CTE UPSERT에 DEFAULT 값을 생성 (0) | 2020.06.14 |
---|---|
[SQL] 그 조각하여 문자열의 조각 순서를 선택 MYSQL (0) | 2020.06.14 |
[SQL] 문자열로 안전 SQL 문 만들기 (0) | 2020.06.14 |
[SQL] SQLSRV 및 사용 PHP에서 저장 프로 시저를 실행하는 방법 "을?" 스타일의 매개 변수 (0) | 2020.06.14 |
[SQL] 선택 (2008 SQL 서버)에서 두 테이블을 결합 (0) | 2020.06.14 |