甲骨文:这次加入有什么问题?

时间:2011-02-09 21:35:49

标签: sql oracle join inner-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 个答案:

答案 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
));