2017-03-15 3 views
0

Oracle SQL을 처음 접했으므로 여러 가지 식을 배우기 위해 몇 가지 시나리오를 수행해야합니다.오라클의 누락 된 키워드 오류 - 잘못된 구문 WHERE 표현

현재이 문장을 작업하고 있지만 구문에 문제가있어 올바른 위치에서 표현식을 얻으려고합니다.

내가 잘못하고있는 것을 보면서 올바른 구문을 배우도록 신경 쓰지 않는다면 많이 감사하겠습니다.

Sale, SaleDetail, OrderStatus, Warehouse, User 및 StockDetail 테이블에서 모든 것을 찾아야합니다. 내가 찾을 필요가

필드는 saleno, serialstart, serialend, 제품 설명 (레이블 필드), 판매 상태 (saleid (내 생각)), WarehouseName (WH.NAME)

여기에 아래의 코드가 있습니다 나는 지금까지 썼다. 아래

완료 코드, 몇 가지 표현과 조건을 변경 :

SELECT 
S.SALENO, 
SD.SERIALSTART, 
SD.SERIALEND, 
SDT.LABEL, 
USR.USERNAME, 
WH.NAME 
FROM 
ITR_SALE, 
ITR_SALEDETAIL, 
ITR_ORDER, 
ITR_WAREHOUSE, 
ITR_USER, 
ITR_STOCKDETAIL 
JOIN ITR_SALE S 
JOIN ITR_SALEDETAIL SD ON S.ID = SD.SALENO 
JOIN ITR_WAREHOUSE WH ON SD.ID = WH.NAME 
JOIN ITR_ORDER ODR ON WH.ID = ODR.STATUSID 
JOIN ITR_USER USR ON ODR.ID = USR.USERNAME 
JOIN ITR_STOCKDETAIL ON USR.ID = SDT.LABEL 
WHERE S.LASTSTATUSCHANGETIME 
BETWEEN ('2016-01-01 00:00:00' AND '2016-12-31 23:59:59') 
AND STATUSID = ('COMPLETED'); 

다음은 편집이

ORA-00905: missing keyword 
00905. 00000 - "missing keyword" 
*Cause:  
*Action: 
Error at Line: 21 Column: 1 

오류 메시지를 다음과 같습니다.

SELECT 
S.SALENO, 
SD.SERIALSTART, 
SD.SERIALEND, 
SDA.LABEL, 
USR.USERNAME, 
WH.NAME 
FROM 
ITR_SALE S 
INNER JOIN 
ITR_SALEDETAIL SD ON S.ID = SD.SALEID 
INNER JOIN 
ITR_ORDERSTATUS ODS ON SD.ID = ODS.ID 
INNER JOIN 
ITR_WAREHOUSE WH ON ODS.ID = WH.NAME 
INNER JOIN 
ITR_USER USR ON WH.ID = USR.USERNAME 
INNER JOIN 
ITR_STOCKDETAIL SDA ON USR.ID = SDA.LABEL 
WHERE 'DATE' BETWEEN '2016-01-01' AND '2016-12-31' 
AND S.STATUSID = '4';` 
+0

마지막 두 줄에서 괄호를 제거하십시오. – mathguy

답변

1

올바른 조인 구문을 사용하십시오. 편집하다. 마지막 줄 또는 사용자 IN 절에서 괄호를 제거해야합니다.

SELECT 
S.SALENO, 
SD.SERIALSTART, 
SD.SERIALEND, 
SDT.LABEL, 
USR.USERNAME, 
WH.NAME 
FROM 
ITR_SALE S INNER JOIN ITR_SALEDETAIL SD ON S.ID = SD.SALENO 
INNER JOIN ITR_SALEDETAIL SD ON S.ID = SD.SALENO 
INNER JOIN ITR_WAREHOUSE WH ON SD.ID = WH.NAME 
INNER JOIN ITR_ORDER ODR ON WH.ID = ODR.STATUSID 
INNER JOIN ITR_USER USR ON ODR.ID = USR.USERNAME 
INNER JOIN ITR_STOCKDETAIL STD ON USR.ID = SDT.LABEL 
WHERE S.LASTSTATUSCHANGETIME 
BETWEEN '2016-01-01 00:00:00' AND '2016-12-31 23:59:59' 
AND STATUSID = 'COMPLETED'; 
+0

BETWEEN 조건에서도 괄호를 제거하십시오. – mathguy

+0

오른쪽. 그것을 놓쳤습니다. 감사합니다 – Utsav

+0

도움을 주셔서 감사합니다. 나는 성명서의 일부를 변경했지만 궁극적으로 몇 가지 오류가 발생했습니다. –