2014-09-30 2 views
0

У меня мало сомнений в MySQL. При загрузке данных из одной таблицы в другую, я столкнулся один вопросОбработка динамических пропущенных столбцов в MySQL

первой таблице: эми

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 I усекаю данные таблицы emprefers. И таблица emprefers никогда не менялась.

Опять же, в третий раз я снова запустил тот же запрос. Запрос не удался, причина заключалась в том, что в таблице emp отсутствовали столбцы sal и deptno.
Я не хочу снова редактировать запрос, причина в том, что мы не знаем, какие столбцы/удалены из таблицы emp. На этот раз мы хотим решить проблему.
Мы хотим загрузить данные во вторую таблицу, если столбцы доступны в таблице emp, затем загрузите данные - в противном случае нам необходимо передать null или пустые значения для этих столбцов.
Пожалуйста, расскажите, как написать запрос, чтобы проверить, существует ли столбец или нет, и если он существует для извлечения того же столбца, в противном случае назначьте значения null для этого столбца.

+0

Какова актуальность mysqli? MySQL-верстак? и mysql-error-1064? –

ответ

0

Вместо того, чтобы изменять существующий запрос и обрезать таблицу, лучше было бы удалить всю таблицу, сделать копию исходной таблицы emp, а затем вставить в нее данные. Таким образом, они всегда будут одинаковыми.

DROP TABLE emprefers IF EXISTS 
CREATE TABLE emprefers LIKE emp; 
INSERT INTO emprefers SELECT * FROM emp 
+0

Возможно, это не сработает причина: столбцы emp table удалены через несколько дней, добавьте удаленные столбцы, и мы хотим знать, какие столбцы были удалены для этой идентификации, мы передаем нулевые или пустые значения для этого столбца.поэтому мы не хотим, чтобы функция рассылки emprefers table – user3457912

+0

, пожалуйста, дайте мне другое решение – user3457912

0

Это заявление создаст таблицу на лету.

CREATE TABLE databasename.emprefers SELECT * FROM databasename.emp;

Смежные вопросы