Oracle SQL-定义不明确的列

Oracle SQL-定义不明确的列,sql,oracle,Sql,Oracle,实现此查询-抛出“定义不明确的列”错误。我知道这是重新列名和它们的实例被复制。无法确定导致错误的原因 SELECT case.case_id, case.client_id, case.description, case.date_filed, case.date_closed, solicitor.solicitor_id, solicitor.first_name, solicitor.surname, SUM(note.time_spent

实现此查询-抛出“定义不明确的列”错误。我知道这是重新列名和它们的实例被复制。无法确定导致错误的原因

 SELECT case.case_id,
   case.client_id,
   case.description,
   case.date_filed,
   case.date_closed,
   solicitor.solicitor_id,
   solicitor.first_name,
   solicitor.surname,
   SUM(note.time_spent) total_time_spent
FROM note, case
INNER JOIN note
ON note.case_id = case.case_id
INNER JOIN solicitor
ON solicitor.solicitor_id = note.solicitor_id
GROUP BY note.case_id,
     note.solicitor_id,
     case.client_id,
     case.description,
     case.date_filed,
     case.date_closed
ORDER BY note.case_id,
     case.date_filed;

我认为实际的错误在于,您使用了两次
note
表,但没有使用别名。

执行查询

SELECT case.case_id,
   case.client_id,
   case.description,
   case.date_filed,
   case.date_closed,
   solicitor.solicitor_id,
   solicitor.first_name,
   solicitor.surname,
   SUM(note.time_spent) total_time_spent
FROM note, case
INNER JOIN note
ON note.case_id = case.case_id
INNER JOIN solicitor
ON solicitor.solicitor_id = note.solicitor_id
GROUP BY case.case_id,
   case.client_id,
   case.description,
   case.date_filed,
   case.date_closed,
   solicitor.solicitor_id,
   solicitor.first_name,
   solicitor.surname
ORDER BY note.case_id,
     case.date_filed;

我已经修改了group by子句的列。

注意
from
子句中有两次。一条简单的规则:在
from
子句中不要使用逗号。然后,
groupby
子句应该在
FROM
子句中包含所有未聚合的列

此外,表别名将使查询更易于编写和读取:

SELECT c.case_id, c.client_id, c.description, c.date_filed, c.date_closed,
       s.solicitor_id, s.first_name, s.surname,
       SUM(n.time_spent)as  total_time_spent
FROM case c INNER JOIN
     note n
     ON n.case_id = c.case_id INNER JOIN
     solicitor s
     ON s.solicitor_id = n.solicitor_id
GROUP BY c.case_id, c.client_id, c.description, c.date_filed, c.date_closed,
         s.solicitor_id, s.first_name, s.surname,
ORDER BY c.case_id, c.date_filed;

而且,
case
对于表来说是个坏名字,因为它是SQL关键字。它不是Oracle保留字,但看起来仍然很尴尬。

“我知道它是重新列名的,并且列名的实例被复制。”-我不明白你的意思。你能显示完整的错误吗?你的查询看起来像是要混淆。您使用旧的联接符号联接
note
上的
case
,然后再次使用“new”(1992+)内部联接联接联接联接
note
,但仍然没有对其进行别名。所以我认为这可能是你的错误。但除此之外,
case
是一个关键字,如果有一个同名的表,并且没有别名,则查询更难阅读。@Atri-ORA-00918:column定义不明确的00918。00000-“列定义不明确”*原因:*操作:第23行错误列:10