我有这个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
Run Code Online (Sandbox Code Playgroud)
但是当我运行它时,我有这个错误:
ORA-00904: "T1"."WORKCASE_ID": invalid identifier
Run Code Online (Sandbox Code Playgroud)
这有什么不对?
问题是你正在混合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
Run Code Online (Sandbox Code Playgroud)
这将允许隐式连接发生在子查询中,然后您将使用显式连接到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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1137 次 |
| 最近记录: |