Oracle: В чем проблема с этим объединением? - PullRequest
0 голосов
/ 10 февраля 2011

Я не могу заставить этого Join работать в Oracle. Не могу понять, почему?

SELECT E."ci", E."nombre"
FROM EMPLEADO E
WHERE E."ci" IN (SELECT E."cisupervisor" FROM EMPLEADO E);


INNER JOIN empleado ON "ci"= T."ciempleado"

SELECT E."nombre",E."apellido",P."nombreproy"
FROM EMPLEADO E, PROYECTO P
WHERE E."cisupervisor" IN (SELECT E."ci"
FROM EMPLEADO E, PROYECTO P, TRABAJAEN T
WHERE E."sexo"='F' AND E."ci"=T."ciempleado" AND T."horas">60 AND T."codproy"=P."codproy" AND P."fechaini"=2010
);

1 Ответ

2 голосов
/ 10 февраля 2011

Как правильно заметил @cyberwiki, вы пытаетесь объединить два отдельных запроса.

Первый заканчивается строкой 3, потому что заканчивается точкой с запятой.

Эта часть:

INNER JOIN empleado ON "ci"= T."ciempleado"

не работает сам по себе, поскольку вам нужно предложение where после присоединения, если вы хотите больше условий.

Все, что после этой части, является другим запросом, который хорошо выполняется сам по себе.

Вы можете попробовать этот онлайн-валидатор , и вы увидите, что строки 1-3 и все, что после inner join, являются действительными операторами SQL 2003, хотя весь ваш запрос не является.

Мне кажется, вам нужно больше поработать над пониманием того, как работают объединения. Вы не можете просто объединить два отдельных запроса.

Я немного реорганизовался с вашим запросом, и эта версия пройдет, хотя это может быть не то, что вы ищете:

SELECT E."ci", E."nombre"
FROM EMPLEADO E

INNER JOIN empleado ON "ci"= T."ciempleado"

where E."ci" IN (SELECT E."cisupervisor" FROM EMPLEADO E) and 

(SELECT E."nombre",E."apellido",P."nombreproy"
FROM EMPLEADO E, PROYECTO P
WHERE E."cisupervisor" IN (SELECT E."ci"
FROM EMPLEADO E, PROYECTO P, TRABAJAEN T
WHERE E."sexo"='F' AND E."ci"=T."ciempleado" AND T."horas">60 AND T."codproy"=P."codproy" AND P."fechaini"=2010
));
...