• Oracle多对多、维表


    -- 多对多的秘密:项目中,往往把关系分拆出一张单独表
    --维表(学生维度)
    create table t_stu(
       id number primary key,
       user_name varchar2(10)
    );
    insert into t_stu values(1,'小军');
    insert into t_stu values(2,'小黄');
    commit
    select * from t_stu
    drop table t_ke
    --维表(课程维度)
    create table t_ke(
       id number primary key,
       ke_name varchar2(100)
    );
    insert into t_ke values(1,'高等数学');
    insert into t_ke values(2,'离散数学');
    insert into t_ke values(3,'大学数学');
    insert into t_ke values(4,'英语');
    insert into t_ke values(5,'程序员的自我修养');
    insert into t_ke values(6,'软件工程学');
    insert into t_ke values(7,'计算机科学');
    commit
    select * from t_ke
    -- 事实表
    CREATE TABLE t_stu_ke(
      id NUMBER PRIMARY KEY,
      user_id NUMBER(5),
      ke_id NUMBER(5)
    );
    delete from t_stu_ke
    insert into t_stu_ke values(1,1,1);
    insert into t_stu_ke values(2,1,2);
    insert into t_stu_ke values(3,1,6);
    commit;
    insert into t_stu_ke values(4,2,4);
    insert into t_stu_ke values(5,2,6);
    commit;
    
    select sk.id,s.user_name,k.ke_name from t_stu_ke sk
    left join t_stu s on sk.user_id =s.id
    left join t_ke k on sk.ke_id=k.id
    
    insert into t_stu_ke values(6,3,3);
    insert into t_stu_ke values(7,2,8);
    commit
    
    select 
       sk.id,
       nvl(s.user_name,'未知学生:'||sk.user_id) 学生,
       nvl(k.ke_name,'未知课程:'||sk.ke_id) 选课
    from t_stu_ke sk
       left join t_stu s on sk.user_id =s.id
       left join t_ke k on sk.ke_id=k.id
       
    -- 简单的说就是用上帝视角看维表   
       group by
  • 相关阅读:
    Canvas与Paint的0基础使用
    PHP经常使用功能
    java枚举在android项目应用
    POJ1833 & POJ3187 & POJ3785 next_permutation应用
    usb芯片调试经验
    Equals和==比較
    JSTL标准标签库具体解释
    零基础学python-3.3 标识符
    用react native 做的一个推酷client
    Linux异常关机后,Mysql启动出错ERROR 2002 (HY000)
  • 原文地址:https://www.cnblogs.com/yuchne/p/12920679.html
Copyright © 2020-2023  润新知