sql请求中的标识符无效
我有此sql请求:sql请求中的标识符无效,sql,oracle,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 这里怎么了?无效标识符表示表没有该列名(WORKCASE\u ID)无效标识符表示表没有该列名(WORKCASE\u ID)区分大小写呢 表已使用“t1”别名,但之后引用为“t1”
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
这里怎么了?无效标识符表示表没有该列名(WORKCASE\u ID)无效标识符表示表没有该列名(WORKCASE\u ID)区分大小写呢 表已使用“t1”别名,但之后引用为“t1”
只是一个建议……:) 那么区分大小写呢 表已使用“t1”别名,但之后引用为“t1”
只是一个建议……:) 问题在于您混合了
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
问题是您混合了
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
您使用哪种RDBMS?
Task
表是否有WORKCASE\u ID
字段?任务t1、任务t2的应该做什么?表之间没有联接条件。你打算交叉会合吗?告诉我们您的表结构和查询的意图如何?Task中是否存在workcase\u id
列我收回我的重复建议。蓝足有正确的答案,与双引号无关。您使用哪种RDBMS?Task
表是否有WORKCASE\u ID
字段?任务t1、任务t2的应该做什么?表之间没有联接条件。你打算交叉会合吗?告诉我们您的表结构和查询的意图如何?Task中是否存在workcase\u id
列我收回我的重复建议。BlueFoots的答案是正确的,它与双引号无关。只有当标识符在双引号中时,Oracle才区分大小写。这不是查询中的情况,但可能是创建表时的情况。只有当标识符在双引号中时,Oracle才区分大小写。这不是查询中的情况,但可能是创建表时的情况。这是正确答案-我需要撤回我的重复投票。一个更简单的解决方案是将FROM子句中的逗号替换为t1交叉连接t2
。它的输入更少,并且更容易理解查询实际上在做什么。另外,它将所有连接保持在一个语法中。@APC您是对的,我忘了使用交叉连接
,我更新了我的答案以包含它。太早了我在两个句子里把“the”拼了两次为“teh”。我在午餐时间打字,所以我甚至没有“太早”的借口8-@APC你有“我太忙了吃东西”的借口。这是正确的答案-我需要撤回我的重复投票。一个更简单的解决方案是将FROM子句中的逗号替换为t1交叉连接t2
。它的输入更少,并且更容易理解查询实际上在做什么。另外,它将所有连接保持在一个语法中。@APC您是对的,我忘了使用交叉连接
,我更新了我的答案以包含它。太早了我在两个句子里把“the”拼了两次为“teh”。我在午餐时间打字,所以我甚至没有“太早”的借口8-@APC你有“我太忙了吃东西”的借口。
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