处理MySQL中的动态错过列

时间:2014-09-30 07:21:45

标签: mysql mysqli mysql-workbench mysql-error-1064

我对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表中缺少deptnoemp列。
我不想再次编辑查询,原因是我们不知道从emp表中删除哪些列。 这次我们要解决问题 如果列在emp表中可用,我们希望将数据加载到第二个表中,然后加载数据 - 否则我们需要传递null或这些列的空值。
请告诉我如何编写查询以检查列是否存在,以及是否存在以检索同一列,否则为该列分配null值。

2 个答案:

答案 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;