如何将多个联接表映射到具有不同列名的新表中

时间:2020-04-14 06:34:43

标签: python sql database oracle

因此,我的组织正在向另一个组织提供数据,该组织要求数据与特定的架构相匹配,但是所需的数据分布在具有不同字段名称的多个表中。

我在适用的相应字段(即LOCATION_ID-> STATE_ID)上做了一个人行横道,而我们的数据中不存在某些字段。我的问题是概念性的,因为我不确定最好的方法是什么。 正确方向的任何指点都会有所帮助。 我最熟悉Python,并且正在考虑使用Pandas脚本或R脚本重做数据并导出到新表,但是我敢肯定,在标准SQL或t-SQL中有更优雅的解决方案。

编辑:

每个建议的示例:

源表

SITE_USE
未知
海拔
ELEV_METHOD
ELEV_DATUM

新表格

井号
井水水位计指示器
地表高程值(ft)
地面高程方法
地面高程基准

2 个答案:

答案 0 :(得分:0)

SQL查询可以直接连接具有alias列名的表

  SELECT C.Id AS Identifier, C.LastName + ', ' + C.FirstName AS CustomerName
 FROM Order O JOIN Customer C ON O.CustomerId = C.Id

这里Order是一个表,Customer是另一个表
每个表分别具有别名标识符OC
CustomerName是由两列组成的不存在的列
IdentifierId表中为Customer表中的C.Id赋予的别名,

以同样的方式可以连接另一个表,依此类推

ON O.CustomerId = C.Id表示客户表和订单表在该列中具有相同的数据

答案 1 :(得分:0)

我正在考虑一个视图

在Oracle中,有Scott的示例架构,其中包含有关员工和部门的表。一个简单的查询,其中没有任何列的映射,如下所示:

SQL> select e.deptno, d.dname, e.empno, e.ename, e.job, e.sal
  2  from emp e join dept d on e.deptno = d.deptno
  3  where d.deptno = 10;

    DEPTNO DNAME               EMPNO ENAME      JOB              SAL
---------- -------------- ---------- ---------- --------- ----------
        10 ACCOUNTING           7782 CLARK      MANAGER         2450
        10 ACCOUNTING           7839 KING       PRESIDENT       5000
        10 ACCOUNTING           7934 MILLER     CLERK           1300

SQL>

现在,如果可以(为什么不能呢?)为您的表创建这样的查询,一个简单的选择是创建一个视图并进行列映射。例如,与上述设置相同的列:

SQL> create or replace view v_emps as
  2  select e.deptno as dept_number,
  3         d.dname  as dept_name,
  4         e.empno  as employee_id,
  5         e.ename  as employee_name,
  6         e.job,
  7         e.sal    as salary
  8  from emp e join dept d on e.deptno = d.deptno;

View created.

SQL>

最后,这是一个简单的查询问题,即使用全新的列名来获取所需数据并将其提供给需要的人:

SQL> select * from v_emps
  2  where dept_number = 10;

DEPT_NUMBER DEPT_NAME      EMPLOYEE_ID EMPLOYEE_N JOB           SALARY
----------- -------------- ----------- ---------- --------- ----------
         10 ACCOUNTING            7782 CLARK      MANAGER         2450
         10 ACCOUNTING            7839 KING       PRESIDENT       5000
         10 ACCOUNTING            7934 MILLER     CLERK           1300

SQL>

不需要其他映射;执行任何类型的查询,它将完成:

SQL> select * from v_emps
  2  where job = 'CLERK';

DEPT_NUMBER DEPT_NAME      EMPLOYEE_ID EMPLOYEE_N JOB           SALARY
----------- -------------- ----------- ---------- --------- ----------
         10 ACCOUNTING            7934 MILLER     CLERK           1300
         20 RESEARCH              7876 ADAMS      CLERK           1100
         20 RESEARCH              7369 SMITH      CLERK            800
         30 SALES                 7900 JAMES      CLERK            950

SQL>

如果您使用的是MS SQL Server(关于您提到的T-SQL),也没有问题;那里也有景色。