标签: ora-00918

ORA-00918:SELECT*中模糊定义的列

获取ORA-00918:列模糊定义:运行此SQL:

SELECT *
FROM
  (SELECT DISTINCT(coaches.id),
    people.*,
    users.*,
    coaches.*
  FROM "COACHES"
  INNER JOIN people ON people.id = coaches.person_id
  INNER JOIN users ON coaches.person_id = users.person_id
  LEFT OUTER JOIN organizations_users ON organizations_users.user_id = users.id
) WHERE rownum <= 25
Run Code Online (Sandbox Code Playgroud)

有什么建议吗?

sql oracle ora-00918

29
推荐指数
2
解决办法
16万
查看次数

SQL:如何根据两个字段查找重复项?

我在Oracle数据库表中有行,对于两个字段的组合应该是唯一的,但是没有在表上设置唯一约束,所以我需要使用SQL找到所有违反约束的行.不幸的是,我的微薄SQL技能无法胜任.

我的表有三列相关:entity_id,station_id和obs_year.对于每一行,station_id和obs_year的组合应该是唯一的,我想通过SQL查询将它们刷出来查明是否存在违反此行的行.

我尝试了以下SQL(由前一个问题提出),但它对我不起作用(我得到ORA-00918列模糊定义):

SELECT
entity_id, station_id, obs_year
FROM
mytable t1
INNER JOIN (
SELECT entity_id, station_id, obs_year FROM mytable 
GROUP BY entity_id, station_id, obs_year HAVING COUNT(*) > 1) dupes 
ON 
t1.station_id = dupes.station_id AND
t1.obs_year = dupes.obs_year
Run Code Online (Sandbox Code Playgroud)

有人可以建议我做错了什么,和/或如何解决这个问题?

sql oracle unique unique-constraint ora-00918

20
推荐指数
2
解决办法
7万
查看次数

为什么Oracle没有为此查询引发"ORA-00918:列模糊定义"?

我刚刚在Oracle中遇到了一个奇怪的行为,我期望ORA-00918被提升,但事实并非如此.例如,以此查询为例.

SELECT *
FROM USER_TABLES TAB
JOIN USER_TRIGGERS TRG ON TRG.TABLE_NAME = TAB.TABLE_NAME
WHERE STATUS = 'DISABLED'
Run Code Online (Sandbox Code Playgroud)

此查询在概念上寻找具有禁用触发器的表的详细信息,但请注意,这不是我想要解决的问题.该查询,数据字典,视图或表格不是唯一的问题; 据我所知,它适用于任何一组表或视图(从我试过的两三个).

无论如何,尝试运行此查询,你会得到ORA-00918,因为两者USER_TABLESUSER_TRIGGERS有一个名为列STATUS,从而得到查询运行WHERE条款需要更改到TRG.STATUS.好吧,很酷,但尝试加入另一张桌子.

SELECT *
FROM USER_TABLES TAB
JOIN USER_TRIGGERS TRG ON TRG.TABLE_NAME = TAB.TABLE_NAME
JOIN USER_CONSTRAINTS CON ON CON.TABLE_NAME = TAB.TABLE_NAME
WHERE STATUS = 'DISABLED'
Run Code Online (Sandbox Code Playgroud)

这个查询,没有限定你的意思是哪个STATUS列,神奇地工作!别介意语义或查询返回的内容,没有错误. USER_CONSTRAINTS甚至还有一个名称STATUS也是如此,所以当有两列可供选择时它怎么会不知道该怎么做但是它更加模棱两可呢?

顺便说一下,这一切都在10.2.0.3.0上,如果你的查询中有两个以上的表,ORA-00918就会停止被提升.如果这是一个Oracle错误,有人知道它何时被修复,那么如果我们的数据库升级,哪个Oracle版本可能会导致牛仔查询爆炸?

更新

感谢BQ用于演示该错误已在11.2.0.1.0中修复.任何可以在早期版本中修复它的人的赏金!

sql oracle oracle10g oracle11g ora-00918

17
推荐指数
2
解决办法
2万
查看次数

在Oracle ANSI join中混合使用"USING"和"ON"

我写了一个像这样的Oracle SQL表达式:

SELECT
...
FROM mc_current_view a
JOIN account_master am USING (account_no)
JOIN account_master am_loan ON (am.account_no = am_loan.parent_account_no)
JOIN ml_client_account mca USING (account_no)
Run Code Online (Sandbox Code Playgroud)

当我尝试运行它时,Oracle在"ON"自连接行中抛出一个错误:"ORA-25154:USING子句的列部分不能有限定符".

如果我省略"am"限定符,它会说:"ORA-00918:列模糊定义".

解决这个问题的最佳方法是什么?

sql oracle ora-00918

8
推荐指数
2
解决办法
1万
查看次数

ORA-00918:列模糊定义:如何查找列

我得到了经典错误"ORA-00918:列模糊定义",通常我知道如何解决它,但我现在的问题是我正在使用700行查询.有没有办法识别列?

Thx Daniele

oracle ora-00918

4
推荐指数
2
解决办法
3万
查看次数

Hibernate Criteria导致ORA-00918:列模糊定义

我正在运行以下代码:

      Criteria crit = dao.getSesion().createCriteria(TAmbitos.class);
      crit.add( Restrictions.sqlRestriction("translate(upper(nombre), 'ÁÉÍÓÚ', 'AEIOU') like translate(upper(?),'ÁÉÍÓÚ', 'AEIOU')",
              param+"%", Hibernate.STRING));
      crit.add(Restrictions.eq("tipoAmbito", "Empresa"));

      crit.setFetchMode("TAmbitosByPais", FetchMode.JOIN);
      crit.createAlias("TAmbitosByPais", "TAmbitosByPais", CriteriaSpecification.LEFT_JOIN);
      crit.add(Restrictions.eq("TAmbitosByPais", ambito));
Run Code Online (Sandbox Code Playgroud)

这导致ORA-00918: column ambiguously defined异常.该条件有一个表TAmbitos引用自身TAmbitosByPais(任何给定的TAmbitos行都有一个TAmbitosByIdPais引用另一个的字段TAmbitos).生成的SQL是:

SELECT this_.id_ambito AS id1_2_1_, this_.depende_empresa AS depende2_2_1_,
   this_.id_zona AS id3_2_1_, this_.pais AS pais2_1_,
   this_.id_cls_soc AS id5_2_1_, this_.tipo_ambito AS tipo6_2_1_,
   this_.nombre AS nombre2_1_, this_.clave_antigua AS clave8_2_1_,
   this_.desactivado AS desactiv9_2_1_,
   tambitosby1_.id_ambito AS id1_2_0_,
   tambitosby1_.depende_empresa AS depende2_2_0_,
   tambitosby1_.id_zona AS id3_2_0_, tambitosby1_.pais AS pais2_0_,
   tambitosby1_.id_cls_soc …
Run Code Online (Sandbox Code Playgroud)

java oracle hibernate ora-00918

2
推荐指数
1
解决办法
3099
查看次数

Oracle 12c - 插入选择查询中的列不明确,ORA-00918

我正在尝试使用单个语句执行多个插入来实现此目的,我正在使用 Insert into select 语句。但是我面临着当两列在插入中具有相同的值时。我收到的错误消息是ORA-00918: column ambiguously defined.

询问

INSERT INTO sample (
    HOST,
    TOTAL_PING,
    TOTAL_UNAVAILABLE_PING
)

SELECT * FROM (

    SELECT 'FR3158-73-1',
    82,
    82
    FROM DUAL
    UNION ALL

    SELECT 'FR3158-76-2',
    80,
    10
    FROM DUAL
)
Run Code Online (Sandbox Code Playgroud)

如果我将一个值更改为有效的值,则第一个 select 语句中存在两个值是 82 和 82 的问题。即使列值相同,我也不知道如何进行这项工作。

- - 更新 - -

表定义

CREATE TABLE sample
(
  ID                      NUMBER GENERATED ALWAYS as IDENTITY(START with 1 INCREMENT by 1) PRIMARY KEY,
  HOST                    VARCHAR2(15 BYTE),
  TOTAL_PING              INTEGER,
  TOTAL_UNAVAILABLE_PING  INTEGER,
  ADDED_ON                TIMESTAMP(6)          DEFAULT systimestamp
);
Run Code Online (Sandbox Code Playgroud)

sql oracle ora-00918 sql-insert oracle12c

2
推荐指数
1
解决办法
321
查看次数

带有两个子选择的FULL OUTER JOIN给出"ORA-00918:列模糊定义"

两个Subselects运行良好独立.

但我希望加入他们,他们总是给出"ORA-00918:列模糊定义".我不明白为什么?

两个子选项都使用其他名称.

SELECT *
  FROM    (SELECT aods.user_id,
                  aods.firstname,
                  aods.lastname,
                  Aods.DEPARTMENT,
                  cods.jc_name
             FROM    personas aods
                  LEFT JOIN
                     user_jc cods
                  ON aods.user_id = cods.user_id
            WHERE cods.jc_name LIKE '%ADM%') ods
       FULL OUTER JOIN
          (SELECT abl.user_id,
                  abl.firstname,
                  abl.lastname,
                  Abl.DEPARTMENT,
                  bbl.ug_name
             FROM    personas abl
                  LEFT JOIN
                     ru_ug bbl
                  ON abl.user_id = bbl.user_id
            WHERE Bbl.UG_NAME LIKE '%ADM%'
                  AND bbl.rss_name = 'TIR') bl
       ON ods.user_id = bl.user_id
Run Code Online (Sandbox Code Playgroud)

sql oracle join subquery ora-00918

1
推荐指数
1
解决办法
7846
查看次数