【问题标题】:Oracle: What's the problem with this join?Oracle:这个连接有什么问题?
【发布时间】:2011-02-09 21:35:48
【问题描述】:

我无法让这个加入在 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
);

【问题讨论】:

  • 这是一个单一的查询吗?它看起来像一团糟,尤其是 ;在第 3 行
  • 您遇到了什么错误?
  • 单独来说,第 1-3 行是有效的,最后 6 行也是有效的,作为另一个查询

标签: sql oracle join inner-join


【解决方案1】:

正如@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
));

【讨论】:

    猜你喜欢
    • 2019-07-21
    • 1970-01-01
    • 2010-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-30
    • 2017-11-18
    相关资源
    最近更新 更多