Oracle:专栏定义(Oracle: column ambigously defined)
我收到以下错误。 据我所知,所有列都是由表名定义的,所以我不明白为什么我从Oracle数据库中得到这个错误。
OCIError: ORA-00918: column ambiguously defined: SELECT * FROM (
SELECT raw_sql_.*, rownum raw_rnum_
raw_sql_
WHERE rownum <= 25
)
WHERE raw_rnum_ > 0
I am getting the following error. As far as I can see are all columns defined by table name, so I do not see why I get this error from my Oracle database.
OCIError: ORA-00918: column ambiguously defined: SELECT * FROM (
SELECT raw_sql_.*, rownum raw_rnum_
raw_sql_
WHERE rownum <= 25
)
WHERE raw_rnum_ > 0
原文:https://stackoverflow.com/questions/35706662
更新时间:2020-08-26 18:08
最满意答案
只有抛出红旗的东西,
ORDER BY offsakid desc
您在select中将一个字段别名为该名称:
OFFSAK.id offsakid,
但它可能是您的某个表上的实际字段名称,您应该按基础字段排序 - 而不是别名。
Only thing that throws a red flag, the
ORDER BY offsakid desc
You alias one field to that name in your select:
OFFSAK.id offsakid,
But it could be an actual field name on one of your tables, and you should order by the underlying field - not the alias.
2016-02-29
相关问答
由于你没有回答评论中的问题,我假设amount_paid列来自visitings表,因为student表看起来像维度表。 column ambiguity错误是由两个表中的st_id列引起的。 所以SQL不知道你指的是哪个表的st_id 。 尝试这个。 select avg (v.visit_cost) as average_cost, s.st_fname, s.st_lname
from student s
inner join visitings v on s.st_id=v
...
您在第一个派生表SQL1选择了两次CLG_NUM和ENT_NUM FROM (
select DISTINCT
PRIMARY_MER_NUM ,
PRIMARY_EXT_MID ,
MER_DBA_NAM,
CLG_NUM, --1
ENT_NUM, --1
ENT_NAM,
MER_OPN_DTE,
MER_CLS_DTE,
MER_FST_DPST_DTE,
CLG_NUM, --2
ENT_NUM --2
from bi.t_mer_dim_na
这使得在外部选择中选择sql1
...
我认为这是ANSI风格连接的一个缺陷。 使用DBMS_XPLAN来查找旧数据库中正在过滤哪个表。 或者更好的是,从业务逻辑中找出他们应该查询的内容。 I think this was a bug with the ANSI style join. Use DBMS_XPLAN to find which table was being filtered in the old database. Or better still, work out from the business logic wh
...
正如评论的那样,我认为Hibernate将默认为spatialDialect,它将是可用的第一个,并且在那种情况下它是Oracle,尽管在persistence.xml中指定了什么。 我找到的第一个解决方法是在实体中注释对于GeometryUserType我将使用Postgis方言,如: @TypeDefs({@TypeDef(name="org.hibernatespatial.GeometryUserType",
parameters={@org.hibernate.anno
...
虽然VARCHAR Infomix类型限制为255个字符,但我会使用LVARCHAR类型,限制为32,739字节。 第二个问题是(1024 char) ,这意味着Oracle可以保存1024个字符。 在像UTF-8这样的编码中,这不等于1024字节。 例如波兰语字母:ąęćŃ要保存2个字节,因此带有1024个波兰字母的文本将使用2048个字节。 Informix使用字节长度,因此您必须知道您的编码和数据。 对于UTF8编码的波兰语文本,我将varchar2(1024 char)转换为lvarcha
...
我无法直接使用该功能。 解决方法是使用oracle命令: using (DealerContext objectContext = new DealerContext())
{
string connString = objectContext.Database.Connection.ConnectionString;
using (var conn = new OracleConnection(connString
...
只有抛出红旗的东西, ORDER BY offsakid desc
您在select中将一个字段别名为该名称: OFFSAK.id offsakid,
但它可能是您的某个表上的实际字段名称,您应该按基础字段排序 - 而不是别名。 Only thing that throws a red flag, the ORDER BY offsakid desc
You alias one field to that name in your select: OFFSAK.id offsakid,
...
您无法插入集合 (例如PL / SQL表)。 您可以使用批量收集语法来填充集合: SELECT ColumnA, ColumnB
BULK COLLECT INTO tableVariableA
FROM physicalTable
WHERE [...];
但是,您可能希望检查这是一种合适的方法,因为SQL Server和Oracle有很大不同。 你不能在普通的SQL中使用PL / SQL表( 至少在12c之前 ),甚至在你的程序中也是如此,所以你可能需要一个模式级别的类型而不是PL / SQ
...
正如您已经发现的那样, DATEPART是一个SQL Server功能,而不是Oracle功能。 您已经显示的替代方法to_number(to_char(v_ExpireTime, 'YY'))虽然会给你一个两位数的值,所以如果你的约会的年份部分是1899 ,它将只返回99 ,所以你不会得到一个匹配。 您可以使用四位数年份日期格式YYYY而不是YY 。 另一种选择是使用提取功能 : IF extract(year from v_ExpireTime) = 1899 THEN ...
As you
...
如果您使用的是Oracle 11g2,unpivot和listagg的组合可以提供帮助,请尝试此查询 WITH T(ID, SLOW, MEDIUM, FAST, SUPER_FAST) AS
(SELECT 1, 'Y', 'Y', 'N', 'Y' FROM DUAL
UNION ALL
SELECT 2, 'N','Y','N', 'Y' FROM DUAL
union all
SELECT 3, 'N','N','N', 'Y' FROM
...