我有这个 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
这里有什么问题?
问题是您正在混合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
标识符无效意味着您的表没有该列名(WORKCASE_ID)
区分大小写呢?
表已使用“t1”作为别名,但之后引用为“T1”......
只是一个建议... :)