2

我有这个 sql 请求:

select T1.ID, T2.ID 
from task t1, task t2
join workcase w on W.ID = T1.WORKCASE_ID
where W.ID = 1683964476
and T1.STATE < 501
and T2.STATE = 501

但是当我运行它时,我有这个错误:

ORA-00904: "T1"."WORKCASE_ID": invalid identifier

这里有什么问题?

4

3 回答 3

6

问题是您正在混合JOIN语法。T1您在and之间使用隐式连接(逗号)T2,然后使用显式JOIN语法连接到workcase表。

JOIN语法优先于逗号,因此当您尝试在连接条件中使用它时,别名不可用。

如果您需要同时使用两者,那么您需要使用:

select T1.ID, T2.ID 
from
(
  select T1.ID, T2.ID, T1.WORKCASE_ID
  from task T1, task T2
  where T1.STATE < 501
    and T2.STATE = 501
) t
inner join workcase w 
  on W.ID = T1.WORKCASE_ID
where W.ID = 1683964476

这将允许在子查询中进行隐式连接,然后您将使用workcase表的显式连接。

或者正如@APC 在评论中所说,这也可以写成CROSS JOIN

select T1.ID, T2.ID 
from task T1
cross join task T2
inner join workcase w 
  on W.ID = T1.WORKCASE_ID
where W.ID = 1683964476
  and T1.STATE < 501
  and T2.STATE = 501
于 2013-02-07T11:35:34.327 回答
-1

标识符无效意味着您的表没有该列名(WORKCASE_ID)

于 2013-02-07T11:30:30.550 回答
-1

区分大小写呢?

表已使用“t1”作为别名,但之后引用为“T1”......

只是一个建议... :)

于 2013-02-07T11:34:12.810 回答