【问题标题】:Update values of a specified column from one table to another将指定列的值从一个表更新到另一个表
【发布时间】:2017-01-13 11:43:32
【问题描述】:

查询:

select * from emp;

输出:

ID NAME                        AGE     SALARY ADDRESS
------ -------------------- ---------- ---------- --------------------
101 Naveen                       28      25000 charminar
102 Vishal                       32      28000 kothapet
180 Manish                       25      18000 Begumpet
120 Sravan                       29      20000 Vidyanagar
106 Mukesh                       26      21000 Vanastalipuram
115 Sankar                       23      15000 Kairtabad
130 Asif                         24      16000 Sultan nagar
142 Deeraj                       27      21500 Lalbazar

查询:

select * from dept;

输出:

JOB_ID JOB_TITLE            HIRE_DATE     EMP_ID
------ -------------------- --------- ----------
12254 Software Testing     16-APR-14
13696 Developer            25-MAR-13
13589 Manager              21-JUN-10
13696 developer            26-DEC-13
15395 DBA                  15-APR-12
12254 Software testing     14-NOV-14
13696 Developer            17-FEB-11
15395 DBA                  23-JAN-13

我必须将表 EMP 中的所有 (ID) 值复制到表 DEPT (EMP_ID) 中。

【问题讨论】:

  • 你会怎么做?有什么关系?
  • 这似乎是一个非常奇怪并且可能完全错误的设计 - 您设置它的方式(EMP_ID as FK in table DEPT)意味着:每个部门都可以有 大多数 一个员工! .....那两张表是如何连接的?不知何故,您必须知道哪个员工属于哪个部门......(这就是它应该的方式 - EMP 表应该有一个 DEPT_ID 外键,这样每个员工都可以属于一个部门....)
  • 对于您的设计,最好的方法是坐下来一张一张地映射 ID,因为您无法以任何方式加入这两个表..

标签: sql oracle11g sql-update


【解决方案1】:

与提到的其他评论者一样,您必须手动为每个 EMP_ID 建立链接:

UPDATE dept SET EMP_ID = 101 WHERE JOB_ID = 12254 AND HIRE_DATE = TO_DATE('16-APR-14', 'DD-MON-YY');
UPDATE dept SET EMP_ID = 102 WHERE JOB_ID = 13696 AND HIRE_DATE = TO_DATE('25-MAR-13', 'DD-MON-YY');
UPDATE dept SET EMP_ID = 180 WHERE JOB_ID = 13589 AND HIRE_DATE = TO_DATE('21-JUN-10', 'DD-MON-YY');
UPDATE dept SET EMP_ID = 120 WHERE JOB_ID = 13696 AND HIRE_DATE = TO_DATE('26-DEC-13', 'DD-MON-YY');
UPDATE dept SET EMP_ID = 106 WHERE JOB_ID = 15395 AND HIRE_DATE = TO_DATE('15-APR-12', 'DD-MON-YY');
UPDATE dept SET EMP_ID = 115 WHERE JOB_ID = 12254 AND HIRE_DATE = TO_DATE('14-NOV-14', 'DD-MON-YY');
UPDATE dept SET EMP_ID = 130 WHERE JOB_ID = 13696 AND HIRE_DATE = TO_DATE('17-FEB-11', 'DD-MON-YY');
UPDATE dept SET EMP_ID = 142 WHERE JOB_ID = 15395 AND HIRE_DATE = TO_DATE('23-JAN-13', 'DD-MON-YY');

只需确保每个语句中的 EMP_ID 都是所需的。

【讨论】:

    【解决方案2】:

    emp 和 dept 表之间没有关系。所以没有办法自动填充 EMP_ID 列。你应该一件一件地去做。

    对您的另一个提示是关于您的设计。您可以使用以下设计来存储员工和部门数据。

    New design for storing department and employees

    【讨论】:

      猜你喜欢
      • 2021-10-16
      • 2017-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      相关资源
      最近更新 更多