【问题标题】:How to create a procedure by joining two tables that doesn't have a common column in oracle sql?如何通过连接两个在 oracle sql 中没有公共列的表来创建过程?
【发布时间】:2020-04-24 01:53:43
【问题描述】:

表 1:EMP

列:EMPNO、ENAME、SAL、JOB、DEPTNO

表 2:SALGRADE

列:GRADE、HISAL、LOSAL

鉴于员工的 EMPNO 作为程序的输入,我必须获得相应的 GradeSAL 作为输出。

【问题讨论】:

    标签: oracle join stored-procedures oracle-sqldeveloper bind-variables


    【解决方案1】:

    加入位于losalhisal 之间的sal。比如:

    SELECT g.grade,
           e.sal
           FROM emp e
                LEFT JOIN salgrade g
                          ON g.losal <= e.sal
                             AND g.hisal >= e.sal
           WHERE e.empno = ?;
    

    【讨论】:

      【解决方案2】:

      或者你可以考虑如下的数据库设计:

      create table EMP
      (
          EMPNO   NUMBER(5),
          ENAME   VARCHAR2(50),
          SAL     NUMBER(4),
          JOB     VARCHAR2(20),
          DEPTNO  NUMBER(2),
          GRADE   AS (CASE WHEN SAL >= 1000 AND SAL < 2000 THEN 'LOW'
                                       WHEN SAL >= 2000 AND SAL < 3000 THEN 'MEDIUM'
                                       WHEN SAL >= 3000 AND SAL < 4000 THEN 'HIGH'
                                       ELSE
                                          'UNKNOWN'
                                  END),
          CONSTRAINT emp_pk PRIMARY KEY (EMPNO)
      );
      
      insert into emp (EMPNO,ENAME,SAL,JOB,DEPTNO) values (10001, 'Ram', 1000, 'King', 10 );
      insert into emp (EMPNO,ENAME,SAL,JOB,DEPTNO) values (10002, 'Laxman', 2000, 'Minister', 20 );
      insert into emp (EMPNO,ENAME,SAL,JOB,DEPTNO) values (10003, 'Sita', 3000, 'Queen', 30 );
      insert into emp (EMPNO,ENAME,SAL,JOB,DEPTNO) values (10004, 'Ravan', 5000, 'Rakshas', 40 );
      
      SELECT * FROM EMP;
      

      【讨论】:

        猜你喜欢
        • 2015-11-11
        • 1970-01-01
        • 1970-01-01
        • 2021-09-20
        • 2015-01-11
        • 2021-03-25
        • 2019-09-25
        • 2022-08-19
        • 2016-01-11
        相关资源
        最近更新 更多