Mysql 在语句中插入目标表中存在的所有列

Mysql 在语句中插入目标表中存在的所有列,mysql,insert,Mysql,Insert,假设我有一个表(我们称之为DB10),它有10列。我还有一个表,有15列(DB15),其中10列在名称和数据类型方面与DB10中的列相同 我想将DB10中的所有列插入到DB15中。我已尝试使用以下方法: 插入到DB15中 挑选* 从DB10开始 但这给了我错误代码1136“列计数与第1行的值计数不匹配”。我通过研究了解到,它试图将10个值映射到15列 所以我的问题是,这怎么可能不需要输入各个列。我是否可以使用一个函数使它为无法映射的列假定一个null值 我想这样做的原因是什么?我有10多列需要映

假设我有一个表(我们称之为DB10),它有10列。我还有一个表,有15列(DB15),其中10列在名称和数据类型方面与DB10中的列相同

我想将DB10中的所有列插入到DB15中。我已尝试使用以下方法:

插入到DB15中 挑选* 从DB10开始

但这给了我错误代码1136“列计数与第1行的值计数不匹配”。我通过研究了解到,它试图将10个值映射到15列

所以我的问题是,这怎么可能不需要输入各个列。我是否可以使用一个函数使它为无法映射的列假定一个null值

我想这样做的原因是什么?我有10多列需要映射,我只想简化SQL脚本,较小的脚本更容易检查

我做了研究,发现了这个问题:


看起来这家伙基本上想做同样的事情,但他试图在多个链接表和数组上执行,我无法理解如何将其应用到我的案例中。

不,这是不可能的。您必须输入所有列名。

事实上,最好在INSERT和SELECT语句中列出列

但是,可以通过编程方式生成列表:

<?php
$fields = array();
$cResult = $sDb->query("SHOW COLUMNS IN DB10");
while ($columns = $cResult->fetch_row()) {
    $fields[] = $columns[0];
}
$sDb->query("INSERT INTO DB15 (" . implode(',', $fields) . ") SELECT " . 
           implode(',', $fields) . " FROM DB10"); 
}

“我有一个有10列的数据库”。数据库可以包含表,也可以包含列。我不认为t是最佳实践,它是唯一语法正确的方法。奇怪的语法是什么?这是sql语言吗?我使用的是MySQL Workbench,几乎所有的行旁边都有红色的叉号。这是php语法,而不是sql。好吧,所以不能在MySQL Workbench上完成?我需要什么,如果可能的话,我更愿意在现有的软件上完成。我确实在标题中指定了MySQL,但出于某种原因,一个mod将其编辑掉了。是的,可以在workbench中完成,但是您需要在查询中输入各个列