Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sql请求中的标识符无效_Sql_Oracle - Fatal编程技术网

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”

我有此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”


只是一个建议……:)

那么区分大小写呢

表已使用“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