我对MySQL有一点疑问。在将数据从一个表加载到另一个表时,我遇到了一个问题
第一张表:emp
id | name | sal | deptno | loc | referby
1 | abc | 100 | 10 | hyd | xyz
2 | mnc | 200 | 20 |chen | pqr
第二个表:emprefers
id | name | sal | deptno | loc | referby
现在我想将emp
表数据加载到emprefers
表中。我写了一个像
insert into emprefers select * from emp after
我运行了查询,数据已加载到emprefers
表中,如下所示:
id | name | sal |deptno | loc |referby
1 | abc | 100 | 10 | hyd | xyz
2 | mnc | 200 | 20 | chen | pqr
现在我第二次运行相同的查询。它失败了。原因是名称列已从emp
表中删除。
我编辑了这样的查询:
insert into emprefers select id,'null'as name,sal,deptno,loc,referby from emp
在我再次运行已编辑的查询后,现在记录正在加载到emprefers
表中,数据如下所示:
id | name | sal |deptno | loc |referby
1 | null | 100 |10 | hyd | xyz
2 | null | 200 |20 |chen | pqr
每次加载emprefers
表之前,我都会截断emprefers
表数据。并且emprefers
表结构从未改变过。
再次,我第三次再次运行相同的查询。查询失败,原因是sal
表中缺少deptno
和emp
列。
我不想再次编辑查询,原因是我们不知道从emp
表中删除哪些列。
这次我们要解决问题
如果列在emp
表中可用,我们希望将数据加载到第二个表中,然后加载数据 - 否则我们需要传递null
或这些列的空值。
请告诉我如何编写查询以检查列是否存在,以及是否存在以检索同一列,否则为该列分配null
值。
答案 0 :(得分:0)
不是更改现有查询并截断表,最好是删除整个表,复制原始emp
表,然后将数据插入其中。这样他们总是一样的。
DROP TABLE emprefers IF EXISTS
CREATE TABLE emprefers LIKE emp;
INSERT INTO emprefers SELECT * FROM emp
答案 1 :(得分:0)
此语句将动态创建表。
CREATE TABLE databasename.emprefers SELECT * FROM databasename.emp;