【问题标题】:Find disjoint sets in a table with nested table colum sql oracle在具有嵌套表列 sql oracle 的表中查找不相交集
【发布时间】:2012-04-13 16:50:56
【问题描述】:

这些是样本数据:

CREATE OR REPLACE TYPE CourseList AS TABLE OF VARCHAR2(64);

CREATE TABLE department (
courses  CourseList)
NESTED TABLE courses STORE AS courses_tab;

INSERT INTO department (courses)VALUES (CourseList('1','2','3'));
INSERT INTO department (courses)VALUES (CourseList('4','5','7'));
INSERT INTO department (courses)VALUES (CourseList('1','2'));

commit;

 select d1.courses
from department d1
where not exists (select 1 from department d2 
  where d1.courses<> d2.courses and d1.courses submultiset of d2.courses);

commit;

Result:

CourseList(1,2,3)
CourseList(4,5,7)

查询返回正确的数据,CourseList 不是表的任何其他 CourseList 的子集。

关于如何在没有子查询的情况下执行此操作的一些想法,我认为可以使用连接同一张表来完成,但我不知道该怎么做。

谢谢。

【问题讨论】:

    标签: sql oracle nested set multiset


    【解决方案1】:

    我更喜欢你的子查询,我自己。但另一种选择是:

    select d.courses
    from department d
    MINUS
    select d2.courses
    from department d2, department d1
    where d1.courses<> d2.courses
    and d1.courses submultiset of d2.courses;
    

    【讨论】:

    • 只是好奇,什么时候可以使用submultiset
    • 嗯...什么时候需要知道一个集合是否是另一个集合的子多重集合?
    【解决方案2】:

    “不存在”查询可以表示为使用反连接模式的连接。

    select d1.courses
    from department d1
    left join department d2
       on d1.courses <> d2.courses
      and d1.courses submultiset of d2.courses
    where d2.sources is null
    

    这个想法是 try 使用与 not exists 子句中相同的条件进行外部自连接,然后在 where 子句中只保留没有这样的行加入已存在。

    我通常在 where 子句中使用主键。要求该列不允许空值(这样您就可以知道没有匹配项)。

    使用反连接有时会更快,它可以更清楚地说明哪些索引可能会有所帮助,但如果不熟悉该模式,阅读起来也可能会令人困惑。

    【讨论】:

      【解决方案3】:

      未经测试,但这可能是您正在寻找的:

      select d1.courses
      from department d1
      cross join department d2
      where d1.courses<> d2.courses 
      and d1.courses not submultiset of d2.courses;
      

      【讨论】:

        猜你喜欢
        • 2010-10-13
        • 2018-08-08
        • 1970-01-01
        • 2012-12-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-16
        • 2011-09-14
        相关资源
        最近更新 更多