【问题标题】:Oracle - EXCEPT Error甲骨文——除了错误
【发布时间】:2012-02-19 16:05:21
【问题描述】:

列和表很少,如下:

注意:所用元素的名称仅用于说明目的。

SELECT T.col1 
FROM Table1 T 
WHERE NOT EXISTS (
   (SELECT * FROM Table2) 
     EXCEPT (SELECT TT.col1 
             FROM TableTT TT 
             WHERE TT.col2 = T.col2)
     );

错误:缺少右括号,尽管括号似乎匹配。

但是,我知道它实际上与括号无关。我怀疑错误出现在 EXCEPT 子句中的某个地方。什么可能导致错误?

【问题讨论】:

  • Sergey 是正确的,你需要使用减号。我认为你已经混淆了你在做什么。 not exists 需要链接到某个描述的标识符,否则如果该子查询中的表不为空,它将始终返回 true。

标签: oracle select except


【解决方案1】:

Oracle 中没有 EXCEPT 运算符。请改用MINUS。参考:Here

在您的查询中,单词“EXCEPT”很可能被视为(SELECT * FROM Table2) 子查询的表别名。

更新:

对提供的数据结构的完整查询如下所示:

SELECT T.col1 
FROM Table1 T 
WHERE NOT EXISTS 
((SELECT col1 FROM Table2) 
MINUS 
(SELECT TT.col1 FROM TableTT TT WHERE TT.col2 = T.col2));

请注意,我已将 Table2* 更改为 col1 - 如果您从 TT 中选择单个 INT 列 TT.col1,那么您还应该从 Table2 中选择单个 INT 列。

【讨论】:

  • 早些时候尝试过。但是有两个错误。 i) 结果列数不正确。因此从最后一个子查询中删除 * 以便没有。 cols 匹配。 ii) 在 i) 之后,相应的数据类型似乎不匹配。
  • 你能提供你的表结构吗?
  • 抱歉停电了。表 T - col1 INT, col2 CHAR, col3 VARCHAR 表 2 - col1 INT, col2 VARCHAR col3 CHAR 表 TT - col1 INT - 表 2 中的 col1 col2 INT - 表 T 中的 col2 col3 INT
  • 那么你不能像这样使用 EXCEPT/MINUS - 当使用这个结构时,左右两侧应该有完全相同的结构。将在一分钟内编写完整的查询。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-10
  • 2017-09-24
相关资源
最近更新 更多