我遇到了这个错误:
ORA-00904:“LASTNAME”:标识符无效
尝试使用concat函数创建报表时。 这是查询:
SELECT 'Full Name','User Name', 'Email' FROM Dual
UNION ALL
SELECT distinct concat(concat(firstname, ' '), lastname), username, Email
FROM
(
select distinct concat(concat(firstname, ' '), lastname), username, Email
from sas_aclentry, sas_usergroup
where sas_aclentry.userkey = sas_usergroup.userkey
and objecttype in (16,3,4,101,14,102) and productkey = 1 and type = 1 and privilege !=0 and isdeleted = 0 and STATUS IN (0, 32)
UNION
select distinct concat(concat(firstname, ' '), lastname), username, Email
from sas_objecttree
join sas_usergroup on sas_usergroup.userkey = sas_objecttree.childkey
where isdeleted = 0 and STATUS IN (0, 32)
and parentkey in (
select distinct sas_aclentry.userkey
from sas_aclentry
join sas_usergroup on sas_usergroup.userkey = sas_aclentry.userkey
where objecttype in (16,3,4,101,14,102) and productkey = 1 and type = 2 and privilege !=0 and isdeleted = 0)
)
WHERE UPPER(Email) LIKE '%SAS%';
在谷歌上徘徊,但无法找到任何方法使这项工作。 请帮忙。 感谢任何意见。
威尔
答案 0 :(得分:2)
错误似乎是您的外部查询尝试从派生表中选择lastname,该表不会公开具有该名称的任何列。我猜你想要在派生表中对别名列进行别名并选择它。
尝试将查询的开头更改为:
choose: (event) ->
console.log(@props.id) # This is the correct id that I want to pass into state
@setState({
page: @props.id # @state.page isn't being set to @props.id
}, () =>
console.log(@state.name) # <-- updated value here!
)
console.log(@state.name) # here's old value
对于某些数据库,concat可能需要两个以上的参数,但我不确定这对于Oracle是否正确,但您应该能够使用并置运算符SELECT 'Full Name','User Name', 'Email' FROM Dual
UNION ALL
SELECT fullname, username, Email
FROM
(
select distinct firstname || ' ' || lastname as fullname, username, Email
并将嵌套的concat函数更改为这样:
||
使代码更清洁。 (我也会尝试在显式连接的使用中保持一致 - 在派生表中,您对第一个查询使用隐式连接,对第二个查询使用显式连接。)
答案 1 :(得分:1)
除了已经指出的内容之外,这个查询还有很多错误(你从一个子查询中选择&#34; lastname&#34;它的投影不包含那个名称的列)。
当您执行UNION时,联合的第一个术语必须具有列名或别名,这些名称或别名将用于联合的所有术语。从双重中选择三个字符串(可能意味着用作标题)是不够的,您还必须为它们中的每一个提供别名。例如,select 'Full Name' as fullname, ... from dual
。或者,您可以将select... from dual
留待以后加入工会。
&#34;列标题&#34;显示在查询的顶部并不意味着它们将位于结果集的顶部。如果您希望它们显示在结果的顶部,则必须使用ORDER BY子句(这可能也意味着您需要能够按某种方式进行排序)。
在&#34;问题&#34; Union的一部分,带有子查询的select,带有名称和连接,你在子查询中连接,然后再次连接的外部查询的选择列表(并且假定子查询已连接的相同的三列)。即使没有语法错误,这也不会产生您想要的结果。你可能想要做的是在子查询中进行连接(最好使用可以重复使用的||运算符,而不是Oracle中有限的concat()
);别名连接结果as fullname
,并在外部查询中选择fullname
。
解决这些问题之后,其他人可能会走到前面;我(我们)无法测试,因为您没有提供任何测试输入。如果您需要更多帮助,请跟进/回写。祝你好运!