【问题标题】:Oracle SQL *plus EXCEPT ORA-00907: missing right parenthesisOracle SQL *plus EXCEPT ORA-00907:缺少右括号
【发布时间】:2012-10-06 03:36:45
【问题描述】:

我写了这个查询,但它给了我一个错误:

select c.sid
from catalog c
where exists ((select p.color from parts p)
except (select p2.color from parts p2 where p2.color != 'Red'));

ORA-00907:缺少右括号

你能告诉我哪里不对吗?

目录:

   SID        PID       COST

     1          3         .5
     1          4         .5
     1          8       11.7
     2          3        .55
     2          8       7.95
     2          1       16.5
     3          8       12.5
     3          9          1
     4          5        2.2
     4          6 1247548.23
     4          7 1247548.23

部分:

   PID PNAME                               COLOR

     1 Left Handed Bacon Stretcher Cover   Red
     2 Smoke Shifter End                   Black
     3 Acme Widget Washer                  Red
     4 Acme Widget Washer                  Silver
     5 I Brake for Crop Circles Sticker    Translucent
     6 Anti-Gravity Turbine Generator      Cyan
     7 Anti-Gravity Turbine Generator      Magenta
     8 Fire Hydrant Cap                    Red
     9 7 Segment Display                   Green

【问题讨论】:

  • 对于初学者,您的 EXISTS 子句根本没有连接到目录表 C。此外,EXCEPT 在 oracle 中称为 MINUS。您能否发布您的数据结构和一些示例数据,以及您希望此查询完成什么?您只需编辑答案即可添加此信息。
  • @NWest 我添加了信息,我想知道只供应红色零件的供应商的 sid

标签: sql oracle10g


【解决方案1】:

我想知道只供应红色零件的供应商的 sid

你可以写:

SELECT c.sid
  FROM catalog c
  JOIN parts p
    ON p.pid = c.pid
 WHERE p.color = 'Red'
MINUS
SELECT c.sid
  FROM catalog c
  JOIN parts p
    ON p.pid = c.pid
 WHERE p.color <> 'Red'
;

MINUS之前的部分查找所有供应红色零件的供应商; MINUS 之后的部分查找所有供应-红色部件的供应商;因此,整个查询会找到所有提供红色零件的不同供应商。

【讨论】:

  • 我以前不知道'',这让它变得容易多了,非常感谢!
  • @ChrisPark:不客气!澄清一下,!=&lt;&gt; 在 Oracle 中是等价的。我更喜欢使用&lt;&gt;,因为它是标准 SQL,但你可以使用任何你喜欢的。
猜你喜欢
  • 2017-03-11
  • 2021-07-29
  • 1970-01-01
  • 1970-01-01
  • 2018-07-18
  • 1970-01-01
  • 2016-02-20
  • 2016-10-23
相关资源
最近更新 更多