我有这个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
这里有什么问题?
答案 0 :(得分:6)
问题是您正在混合JOIN
语法。您正在T1
和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
答案 1 :(得分:-1)
无效的标识符表示您的表没有该列名(WORKCASE_ID)
答案 2 :(得分:-1)
区分大小写怎么样?
使用“t1”对表进行别名,然后在此之后引用为“T1”...
只是一个建议......:)