【问题标题】:Parent Child relation on already created SQL Table已创建的 SQL 表上的父子关系
【发布时间】:2021-06-08 09:14:25
【问题描述】:

我在 SQL 上有下表(不可变):

CATEGORY CODE
Section A
Division 01
Group 011
Class 0111
Class 0112
Division 02
Group 021
Class 0211

我想说 CLASSES (ex 0111 & 0112) 属于 GROUP (011) 属于 DIVISION (01) 属于 SECTION (A)。

示例:如果有人搜索 Class 0211,我希望我的表知道 Class 属于 SECTION A。

我该怎么做?谢谢大家。

【问题讨论】:

  • 好吧,code 似乎传达了为人父母的概念,但Section 并没有遵循同样的逻辑。是否有多个部分
  • 是的,有很多部分(A、B、C、D、E、F...),并且它不遵循部分和数字之间的任何路径。如您所知,部门、组和班级是的。

标签: mysql sql relational-database parent-child parent


【解决方案1】:

我通过创建一个加入“SECTION + all”的新列来解决它(示例:C0411),因为这种关系不可能通过编程来实现。

现在,我拥有与 nums 相关的所有 muy 字段(011 属于 01...),并且由于这个新列,Section 也相关:

Example of how many SECTIONS are

【讨论】:

    【解决方案2】:

    试试这个。它将为您提供行之间的依赖关系。如果您可以发布预期的输出,我很乐意调整答案以使其符合您的要求。

    with aux (category, code) as(
        select 'Section',   'A' from dual union all
        select 'Division',  '01' from dual union all
        select 'Group', '011' from dual union all
        select 'Class', '0111' from dual union all
        select 'Class', '0112' from dual union all
        select 'Division',  '02' from dual union all
        select 'Group', '021' from dual union all
        select 'Class', '0211' from dual)
    SELECT
        a.*,
        sys_connect_by_path(code, '>') hier
    FROM
        aux a
    CONNECT BY
        PRIOR decode(category, 'Section', 1, 'Division', 2, 'Group',
                     3, 'Class', 4, 5) = decode(category, 'Section', 1, 'Division', 2, 'Group',
                                                3, 'Class', 4, 5) - 1;
    

    输出:

    Category  Code Hier
    --------------------
    Section A   >A
    Division    01  >A>01
    Group   011 >A>01>011
    Class   0111    >A>01>011>0111
    Class   0112    >A>01>011>0112
    Class   0211    >A>01>011>0211
    Group   021 >A>01>021
    Class   0111    >A>01>021>0111
    Class   0112    >A>01>021>0112
    Class   0211    >A>01>021>0211
    Division    02  >A>02
    Group   011 >A>02>011
    Class   0111    >A>02>011>0111
    Class   0112    >A>02>011>0112
    Class   0211    >A>02>011>0211
    Group   021 >A>02>021
    Class   0111    >A>02>021>0111
    Class   0112    >A>02>021>0112
    Class   0211    >A>02>021>0211
    Division    01  >01
    Group   011 >01>011
    Class   0111    >01>011>0111
    Class   0112    >01>011>0112
    Class   0211    >01>011>0211
    Group   021 >01>021
    Class   0111    >01>021>0111
    Class   0112    >01>021>0112
    Class   0211    >01>021>0211
    Division    02  >02
    Group   011 >02>011
    Class   0111    >02>011>0111
    Class   0112    >02>011>0112
    Class   0211    >02>011>0211
    Group   021 >02>021
    Class   0111    >02>021>0111
    Class   0112    >02>021>0112
    Class   0211    >02>021>0211
    Group   011 >011
    Class   0111    >011>0111
    Class   0112    >011>0112
    Class   0211    >011>0211
    Group   021 >021
    Class   0111    >021>0111
    Class   0112    >021>0112
    Class   0211    >021>0211
    Class   0111    >0111
    Class   0112    >0112
    Class   0211    >0211
    

    【讨论】:

    • 非常感谢!
    • 如果您觉得本文有帮助,请不要忘记点赞。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-16
    • 2019-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多