2016-09-27 101 views
3

我是一个漂亮的绿色新手,仍然是SQL,并且任务非常繁琐。我需要将tableA中61列中的58列移到tableB中。 tableA有61列,只有15行,tableB现在有58列和零行。我已经阅读了关于如何实现这一点的多个源文件(将数据从一个表格移动到相关表格),但没有一个具体谈论我正在处理的这个特定情况。MySQL:将数据从61列表移动到58列表

使事情变得更加复杂,第二个表没有与第一个表的顺序相同的列,所以这也带来了问题。这个SO帖子看起来很有希望,但它正在使用一个相当小的数据集:SQL: Move column data to other table in same relation。这一个也是类似的MYSQL - Move data from one table to a related one?。问题是他们都从一张小桌子移到一张更大的桌子上,而不是面对面。

这里是我的企图使这一过渡发生(和不成功的包括错误指示)初始查询:

INSERT INTO tableB SELECT * FROM tableA; 
ERROR 1136 (21S01): Column count doesn't match value count at row 1 

tableA 
+-------------------------------+------------------+------+-----+-------------------+-----------------------------+ 
| Field       | Type    | Null | Key | Default   | Extra      | 
+-------------------------------+------------------+------+-----+-------------------+-----------------------------+ 
| id       | int(11) unsigned | NO | PRI | NULL    | auto_increment    | 
| staff_fk      | int(11) unsigned | NO |  | NULL    |        | 
| hire_date      | date    | NO |  | NULL    |        | 
| position      | varchar(75)  | NO |  | NULL    |        | 
| manager      | varchar(75)  | NO |  | NULL    |        | 
| employment_application  | char(1)   | NO |  | i     |        | 
| resume      | char(1)   | NO |  | i     |        | 
| references_checked   | char(1)   | NO |  | i     |        | 
| new_hire_letter    | char(1)   | NO |  | i     |        | 
| clinical_training_initiated | char(1)   | NO |  | i     |        | 
| name_badge_ordered   | char(1)   | NO |  | i     |        | 
| keycode_access    | char(1)   | NO |  | i     |        | 
| tf_up_setup     | char(1)   | NO |  | i     |        | 
| un_pw_setup     | char(1)   | NO |  | i     |        | 
| drug_screen     | char(1)   | NO |  | i     |        | 
| background_investigation  | char(1)   | NO |  | i     |        | 
| licenses_education_verified | char(1)   | NO |  | i     |        | 
| cpr       | char(1)   | NO |  | i     |        | 
| clinic_tour_introductions  | char(1)   | NO |  | i     |        | 
| sick_tardy_phone_notification | char(1)   | NO |  | i     |        | 
| work_sched_start_time   | char(1)   | NO |  | i     |        | 
| paydays      | char(1)   | NO |  | i     |        | 
| ds_pto      | char(1)   | NO |  | i     |        | 
| attendance_tardiness   | char(1)   | NO |  | i     |        | 
| evacuation_plan    | char(1)   | NO |  | i     |        | 
| osha       | char(1)   | NO |  | i     |        | 
| emp_handbook_receipt   | char(1)   | NO |  | i     |        | 
| internet_email_phone_usage | char(1)   | NO |  | i     |        | 
| parking_building_access  | char(1)   | NO |  | i     |        | 
| dress_grooming    | char(1)   | NO |  | i     |        | 
| inclement_weather    | char(1)   | NO |  | i     |        | 
| mileage      | char(1)   | NO |  | i     |        | 
| hipaa_training    | char(1)   | NO |  | i     |        | 
| direct_deposit_auth   | char(1)   | NO |  | i     |        | 
| i9       | char(1)   | NO |  | i     |        | 
| w4       | char(1)   | NO |  | i     |        | 
| valid_id      | char(1)   | NO |  | i     |        | 
| update_ext_list    | char(1)   | NO |  | i     |        | 
| emerg_contact_form   | char(1)   | NO |  | i     |        | 
| med_dent_life_vision   | char(1)   | NO |  | i     |        | 
| 401k_pen_sh     | char(1)   | NO |  | i     |        | 
| centricity_access    | char(1)   | NO |  | i     |        | 
| centricity_training   | char(1)   | NO |  | i     |        | 
| phone_training    | char(1)   | NO |  | i     |        | 
| create_active_dir_account  | char(1)   | NO |  | i     |        | 
| email_access     | char(1)   | NO |  | i     |        | 
| drive_access     | char(1)   | NO |  | i     |        | 
| mcafee      | char(1)   | NO |  | i     |        | 
| hr_enrollment_forms   | char(1)   | NO |  | i     |        | 
| ds_signoff     | char(1)   | NO |  | i     |        | 
| ds_clincial_signoff   | char(1)   | NO |  | i     |        | 
| completed      | datetime   | YES |  | NULL    |        | 
| created      | datetime   | NO |  | NULL    |        | 
| last_update     | timestamp  | NO |  | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | 
| portal_access     | char(1)   | NO |  | i     |        | 
| harvest      | char(1)   | NO |  | i     |        | 
| imms_link      | char(1)   | NO |  | i     |        | 
| eprescribe     | char(1)   | NO |  | i     |        | 
| state_alert_access   | char(1)   | NO |  | i     |        | 
| phone_agent     | char(1)   | NO |  | i     |        | 
| pc_tablet_setup    | char(1)   | NO |  | i     |        | 
+-------------------------------+------------------+------+-----+-------------------+-----------------------------+ 
61 rows in set (0.00 sec) 


tableB: 
+-------------------------------+------------------+------+-----+-------------------+-----------------------------+ 
| Field       | Type    | Null | Key | Default   | Extra      | 
+-------------------------------+------------------+------+-----+-------------------+-----------------------------+ 
| id       | int(11) unsigned | NO | PRI | NULL    | auto_increment    | 
| staff_fk      | int(11) unsigned | NO |  | NULL    |        | 
| employment_application  | char(1)   | NO |  | i     |        | 
| resume      | char(1)   | NO |  | i     |        | 
| references_checked   | char(1)   | NO |  | i     |        | 
| new_hire_letter    | char(1)   | NO |  | i     |        | 
| clinical_training_initiated | char(1)   | NO |  | i     |        | 
| name_badge_ordered   | char(1)   | NO |  | i     |        | 
| keycode_access    | char(1)   | NO |  | i     |        | 
| tf_up_setup     | char(1)   | NO |  | i     |        | 
| un_pw_setup     | char(1)   | NO |  | i     |        | 
| drug_screen     | char(1)   | NO |  | i     |        | 
| background_investigation  | char(1)   | NO |  | i     |        | 
| licenses_education_verified | char(1)   | NO |  | i     |        | 
| cpr       | char(1)   | NO |  | i     |        | 
| clinic_tour_introductions  | char(1)   | NO |  | i     |        | 
| sick_tardy_phone_notification | char(1)   | NO |  | i     |        | 
| work_sched_start_time   | char(1)   | NO |  | i     |        | 
| paydays      | char(1)   | NO |  | i     |        | 
| ds_pto      | char(1)   | NO |  | i     |        | 
| attendance_tardiness   | char(1)   | NO |  | i     |        | 
| evacuation_plan    | char(1)   | NO |  | i     |        | 
| osha       | char(1)   | NO |  | i     |        | 
| emp_handbook_receipt   | char(1)   | NO |  | i     |        | 
| internet_email_phone_usage | char(1)   | NO |  | i     |        | 
| parking_building_access  | char(1)   | NO |  | i     |        | 
| dress_grooming    | char(1)   | NO |  | i     |        | 
| inclement_weather    | char(1)   | NO |  | i     |        | 
| mileage      | char(1)   | NO |  | i     |        | 
| hipaa_training    | char(1)   | NO |  | i     |        | 
| direct_deposit_auth   | char(1)   | NO |  | i     |        | 
| i9       | char(1)   | NO |  | i     |        | 
| w4       | char(1)   | NO |  | i     |        | 
| valid_id      | char(1)   | NO |  | i     |        | 
| update_ext_list    | char(1)   | NO |  | i     |        | 
| emerg_contact_form   | char(1)   | NO |  | i     |        | 
| med_dent_life_vision   | char(1)   | NO |  | i     |        | 
| 401k_pen_sh     | char(1)   | NO |  | i     |        | 
| centricity_access    | char(1)   | NO |  | i     |        | 
| centricity_training   | char(1)   | NO |  | i     |        | 
| phone_training    | char(1)   | NO |  | i     |        | 
| create_active_dir_account  | char(1)   | NO |  | i     |        | 
| email_access     | char(1)   | NO |  | i     |        | 
| drive_access     | char(1)   | NO |  | i     |        | 
| mcafee      | char(1)   | NO |  | i     |        | 
| portal_access     | char(1)   | NO |  | i     |        | 
| harvest      | char(1)   | NO |  | i     |        | 
| imms_link      | char(1)   | NO |  | i     |        | 
| eprescribe     | char(1)   | NO |  | i     |        | 
| state_alert_access   | char(1)   | NO |  | i     |        | 
| phone_agent     | char(1)   | NO |  | i     |        | 
| pc_tablet_setup    | char(1)   | NO |  | i     |        | 
| hr_enrollment_forms   | char(1)   | NO |  | i     |        | 
| ds_signoff     | char(1)   | NO |  | i     |        | 
| ds_clincial_signoff   | char(1)   | NO |  | i     |        | 
| completed      | datetime   | YES |  | NULL    |        | 
| created      | timestamp  | NO |  | CURRENT_TIMESTAMP |        | 
| last_update     | timestamp  | NO |  | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | 
+-------------------------------+------------------+------+-----+-------------------+-----------------------------+ 
58 rows in set (0.01 sec) 

我会包括的模式,如果有人想看看他们。

我想知道是否有一种方法可以做到这一点,而不必在INSERT INTO语句中明确标注每一列。任何帮助将不胜感激!

+0

nah。只需放上一个好的播放列表并剪切并粘贴名称即可。 – Drew

+0

Bill Karwin您看到的结果来自“describe tableA”和“describe tableB”命令。我向你保证,模式分别是61列和58列。我将编辑问题以包含这些命令的完整结果。 – TomJ

+0

啊,以前不清楚你是在查询'describe'而不是'select'。对于在您写回复时删除我的问题,我表示抱歉。 –

回答

2

没有,有没有办法做到这一点没有标注每列名柱。在SQL没有语法SELECT *_except_for_a_few_columns

可以产生出INFORMATION_SCHEMA列的清单,让您在繁琐的打字减少:

SELECT GROUP_CONCAT(column_name ORDER BY ordinal_position) AS _cols 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE table_schema = 'mydatabase' AND table_name = 'tableA' 
    AND column_name NOT IN ('do', 'not', 'want') 

更复杂的是,第二个表不没有与第一个列相同的列...

如果两个表中的列至少有相同的名称,那么可以在INSERT语句中使用列列表,而不管自然顺序位置如何on表中定义的那些列。换句话说,以下工作:

INSERT INTO tableB (col1, col4, col2, col6, col9) 
    SELECT col1, col4, col2, col6, col9 FROM tableA; 

如果列数,顺序,名称有所不同,我建议你仔细检查你插入正确的表! :-)

+0

尼斯彻底的周到答案 – Drew

+0

正是我在找的东西!在意识到列计数产生的混淆之后,我在原始问题中发布了模式。在原始表中只有15行,我真的很希望有一个更有效的方法来完成这个任务。谢谢你的伟大答案!我接受了它。 – TomJ

1

是那错误是非常简单的,并说,你不能使用*和需要明确指定像

INSERT INTO tableB 
SELECT col1, col2, col3, ..., col58 FROM tableA; 
+0

这就是我所害怕的,正如你所说的,语法错误非常清楚。虽然真的希望有某种秘密的SQL黑魔法! – TomJ

+0

@TomJ,黑魔法已经被*黑魔法师拼写*见其他答案。 – Rahul

相关问题