Я хочу знать, как использовать много или клаузула. Спасибо - PullRequest
0 голосов
/ 08 января 2020

ошибка: ORA-00920: недопустимый реляционный оператор

SELECT DISTINCT B.MILESTONE_NAME, D.TASK_NAME, F.FIELD_NAME, F.FIELD_ALIAS, G.VALUE 
FROM TBL_APPLICATIONS tblapp
  INNER JOIN TBL_WORKFLOWS tblwflow ON tblwflow.APPLICATION_FK = tblapp.APPLICATION_PK
  INNER JOIN TBL_WORKFLOW_DEFINITION A ON A.WORKFLOW_FK = tblwflow.WORKFLOW_PK
  INNER JOIN TBL_MILESTONE B ON B.MILESTONE_PK = A.START_MILESTONE_FK  OR B.MILESTONE_PK = A.END_MILESTONE_FK
  INNER JOIN TBL_TASK_FOR_MILESTONE C ON  C.MILESTONE_FK = B.MILESTONE_PK 
  INNER JOIN TBL_TASK D ON  D.TASK_PK = C.TASK_FK 
  INNER JOIN TBL_REQ_FOR_TASK E ON  E.TASK_FK = D.TASK_PK 
  INNER JOIN TBL_TASK_REQUIREMENTS F ON F.TASK_REQUIREMENT_PK = E.TASK_REQUIREMENT_FK 
  INNER JOIN TBL_PROJECT_REQ_VALUES G ON G.TASK_REQUIREMENT_FK = F.TASK_REQUIREMENT_PK 
  INNER JOIN TBL_PROJECTS H ON H.PROJECT_PK = G.PROJECTS_FK
WHERE PROJECT_PK = :PROJECT_ID 
  OR B.MILESTONE_NAME 
  OR D.TASK_NAME 
  OR F.FIELD_NAME 
  OR F.FIELD_ALIAS 
  OR G.VALUE IS NULL
GROUP BY B.MILESTONE_NAME, D.TASK_NAME, F.FIELD_NAME, F.FIELD_ALIAS, G.VALUE

1 Ответ

0 голосов
/ 08 января 2020

Это недопустимо Oracle SQL:

WHERE 
    PROJECT_PK = :PROJECT_ID 
    OR B.MILESTONE_NAME 
    OR D.TASK_NAME 
    OR F.FIELD_NAME 
    OR F.FIELD_ALIAS 
    OR G.VALUE IS NULL

Вам необходимо повторить условие IS NULL:

WHERE 
    PROJECT_PK = :PROJECT_ID 
    OR B.MILESTONE_NAME IS NULL
    OR D.TASK_NAME IS NULL
    OR F.FIELD_NAME IS NULL
    OR F.FIELD_ALIAS IS NULL
    OR G.VALUE IS NULL

Примечание: следующая часть Ваш запрос:

INNER JOIN TBL_MILESTONE B 
    ON B.MILESTONE_PK = A.START_MILESTONE_FK  OR B.MILESTONE_PK = A.END_MILESTONE_FK

Можно сократить с помощью оператора IN:

INNER JOIN TBL_MILESTONE B 
    ON B.MILESTONE_PK IN (A.START_MILESTONE_FK, A.END_MILESTONE_FK)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...