sql请求中的标识符无效

时间:2013-02-07 11:27:35

标签: sql oracle

我有这个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

这里有什么问题?

3 个答案:

答案 0 :(得分:6)

问题是您正在混合JOIN语法。您正在T1T2之间使用隐式联接(逗号),然后使用显式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

答案 1 :(得分:-1)

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

答案 2 :(得分:-1)

区分大小写怎么样?

使用“t1”对表进行别名,然后在此之后引用为“T1”...

只是一个建议......:)