【问题标题】:EXCEPT keyword in OracleOracle 中的 EXCEPT 关键字
【发布时间】:2013-03-04 21:53:25
【问题描述】:

我尝试在 Oracle 10.1.0.2.0 中使用 EXCEPT 关键字,但不断收到错误“未知命令”。我试过用谷歌搜索,有人说关键字是 MINUS,所以我改用了 MINUS,但我仍然遇到同样的错误。 任何想法? 谢谢。

所以这是我的查询。 我正在查找注册所有课程编号 > 500 的学生的姓名

SELECT s.name
FROM Students s
WHERE NOT EXISTS
  (
    SELECT c.id
    FROM Courses c
    WHERE c.number > 500

    MINUS

    SELECT e.course_id
    FROM Enrollment e
    WHERE e.student_id = s.id
  );

【问题讨论】:

  • 您能否向我们提供有关您尝试编写的查询的更多信息?也许还有另一种构建方式?
  • @Aiias 肯定有其他方法可以编写它,但我正在尝试使用 EXCEPT/MINUS。
  • EXCEPT 终于在 Oracle 21c 中工作:modern-sql.com/caniuse/except-distinct

标签: sql oracle oracle10g sql-except


【解决方案1】:

Oracle MINUS 是一个运算符;它相当于 SQL Server 中的EXCEPTHere is a previous post 解释差异。这是一个简单的例子:

SELECT a, b, c
FROM   table_a
MINUS
SELECT a, b, c
FROM   table_b

如果您仍有问题,请将您正在使用的完整查询添加到您的问题中;这可能是一个简单的语法错误。

【讨论】:

  • 哦!我弄清楚我的查询出了什么问题。实际上“没有”错误,除了 sqlplus 似乎不喜欢我在 MINUS 关键字前后放置的空行。
  • 太搞笑了!我自己并没有那么多使用 sqlplus,所以这也会难倒我。
  • 伙计们,重复项呢?例如:'a', 'b', 'b' 减去 'a', 'b' 我会得到 'b' 作为结果吗?
【解决方案2】:

Oracle 20c 将支持EXCEPT/EXCEPT ALL 关键字。

SELECT col1, col2
FROM t1
EXCEPT
SELECT col1, col2
FROM t2;

或者EXCEPT ALL如果你想处理重复:

SELECT col1, col2
FROM t1
EXCEPT ALL
SELECT col1, col2
FROM t2;

4.6 Set Operators

集合运算符将两个组件查询的结果组合成一个结果。

EXCEPT第一个查询而不是第二个查询选择的所有不同行

EXCEPT ALL第一个查询选择的所有行,但不包括第二个查询,包括重复项

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-24
    • 2010-09-15
    • 2018-06-20
    • 1970-01-01
    • 2023-03-30
    • 2019-09-03
    • 2020-02-08
    • 2012-09-26
    相关资源
    最近更新 更多