2011-08-18 102 views
0

我有2个表。我想用table2中的行替换表1中的行。 但是表1有更多的列(常见的列名之后添加了),所以下面就不行......将行插入到mySQL表中,其中目标表具有更多列

replace into table1 select * from table2; 

所以,我必须列出所有的列名...

replace into table1 (col1, col2, ...) select col1, col2, ... from table2; 

有没有一种快捷方式来做这样的事情,而不实际列出所有的列?

或者有没有办法从表中生成列名,所以我可以去? ...

replace into table1 <list of columns that are in table2> 
    select <list of columns that are in table2> from table2; 
+0

如果您不指定它们,DBMS应该如何知道要复制哪些列? – feeela

+0

@feeela。我虽然它会使用列顺序,因为它管理如果每个表中有相同数量的列(我的意思是说额外的列被附加到table1后面的常用列名称)。 – spiderplant0

回答

0
INSERT INTO table1 (a,b,c,d) 
SELECT field_that_becomes_a, null as becomes_b, field_that_becomes_c, 'static value' as becomes_d 
FROM table2 

你没有在表1中指定将简单地认为其指定的默认值(或者,如果没有默认杀查询)的任何字段。

+0

我很困惑你的答案。我不想做的事情是明确列出列。即不想写(a,b,c,d) – spiderplant0

+1

这是唯一能够保证事情进入正确位置的方法。否则,你可能会站在500码后面并使用弹射器。也许有些数据最终会进入正确的位置。 –

+0

@ Mark-B,如果是这种情况,那么当解决方案根本不回答问题时,请不要提出解决方案 - 这只会增加混淆。 – spiderplant0

相关问题