答案 0 :(得分:2)
图像中的错误显示“列定义不明确”。仔细看看。您最后的END_DATE
可以引用u
别名或子查询中的表。对其进行更改以匹配其余子查询(FIND_USER_GROUPS_DIRECT.END_DATE
)
编辑
您的查询是
select u.USER_NAME, d.responsibility_key from FND_USER u,FND_RESPONSIBILITY_VL d
where responsibility_id in(
select responsibility_id from
FND_USER_RESP_GROUPS_DIRECT WHERE END_USER_RESP_GROUPS_DIRECT.END_DATE=nvl(END_DATE,sysdate+1)) and
u.END_DATE=nvl(END_DATE,SYSDATE + 1)
;
desc [table_name]
),就无法理解该查询。对于第1点和第2点,格式正确的查询将类似于
select u.user_name, d.responsibility_key
from
fnd_user u,
fnd_responsibility_vl d
where
d.responsibility_id in (
select urgd.responsibility_id
from
fnd_user_resp_groups_direct urgd
where
urgd.end_date = nvl(u.end_date, sysdate+1)
) and
u.end_date = nvl(urgd.end_date, sysdate + 1)
;
这使它更易于阅读,除此之外,您还可以看到没有表定义我猜(请参见第4点),您的end_date
列属于哪些表查询。如果我不得不猜测,Oracle也是如此。那意味着你有一个模棱两可的问题。要解决此问题,请仔细查看原始查询中出现的end_date
列,在没有任何前缀的地方,需要使用适当的别名作为前缀(在为所有表加上别名之后) )。
对于第3点,您可以使用显式联接并通过对所有列使用别名来更清楚地编写查询。至于显式联接,我不知道您的表是什么样子,但是一种可能是
select u.user_name, d.responsibility_key
from fnd_user u
join fnd_responsibility_vl d
on u.id = d.user_id
where
d.responsibility_id in (
select responsibility_id
from fnd_user_resp_groups_direct urgd
where
urgd.end_date = nvl(u.end_date, sysdate+1)
) and
u.end_date = nvl(urgd.end_date, sysdate+1)
;
如果遵循这些要点,您将找到错误的根源。