INSERT INTO语句目标表中存在的所有列

时间:2014-09-15 07:11:03

标签: mysql insert

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

我想将DB10中的所有列插入DB15。我尝试过使用以下内容:

INSERT INTO DB15 选择 * 来自DB10

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

所以我的问题是,如何在不必输入单个列的情况下实现这一目标。我是否可以使用函数使其为无法映射的列假定值为null?

我想这样做的原因?我有超过10列要映射,我只想简化SQL脚本,更小的脚本更容易检查。

我完成了我的研究并在此处找到了这个问题:INSERT into Table On Columns That Exist

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

2 个答案:

答案 0 :(得分:1)

不,不可能。您必须输入所有列名称。

答案 1 :(得分:0)

事实上,最好的做法是在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"); 
}

假设DB15中的剩余列可以为空或具有默认分配