我无法让这个加入在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
);
答案 0 :(得分:2)
正如@cyberwiki正确指出的那样,您基本上是在尝试加入两个单独的查询。
第一个在第3行结束,因为它以分号结束。
这部分:
INNER JOIN empleado ON "ci"= T."ciempleado"
如果您想要更多条件,在您加入后需要where
子句,因此它不能自行运行。
此部分之后的所有内容都是另一个可以自行执行的查询。
您可以尝试this online validator,您会看到第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
));