我尝试使用以下命令将过期的行从一个表移动到另一个表:

MySqlConnection connect = new MySqlConnection(connectionStringMySql);
MySqlCommand cmd = new MySqlCommand();

cmd.Connection = connect;
cmd.Connection.Open();

string commandLine = @"INSERT INTO history SELECT clientid,userid,startdate,
                       enddate,first,city,imgurl,phone,type,seen
                       FROM events WHERE startdate<now();";

cmd.CommandText = commandLine;

cmd.ExecuteNonQuery();
cmd.Connection.Close();

表是完全相同的(在每个表中,我都有带主键的id列,具有自动增量),当我运行它时,会出现以下异常:
Column count doesn't match value count at row 1

知道为什么会坠毁吗?

最佳答案

出现错误的原因是表中的列数与插入的值数不匹配。当您要插入的表上有一个自动递增列时,这种情况很常见。
为了解决这个问题,需要指定要插入值的列名。例子,

INSERT INTO history (col1, col2,....) // << specify column names here
SELECT clientid, userid, startdate, enddate, first,
       city, imgurl, phone, type, seen
FROM   events
WHERE  startdate < now()

我不太确定tablehistory的列名,所以需要将列名更改为表上的有效名称。
例如,您在表历史记录中有一个自动递增列,并且希望保持查询的原样,您可以在NULL语句中传递SELECT,以便将列总数与值总数相匹配。例子,
INSERT INTO history
SELECT NULL, clientid, userid, startdate, enddate, first,
       city, imgurl, phone, type, seen
FROM   events
WHERE  startdate < now()

请记住,在不指定列名的情况下,值的顺序确实很重要。

09-25 23:17