将数据从一个表复制到另一个表ERROR 1136

时间:2017-11-22 10:38:18

标签: mysql

我试图将数据从一个表复制到另一个表。

就此而言,我使用了这个:

INSERT INTO radacct_2011_2012 SELECT 'RadAcctId, AcctSessionId, AcctUniqueId, UserName, Realm, NASIPAddress, NASPortId, NASPortType, AcctStartTime, AcctStopTime, AcctSessionTime, AcctAuthentic, ConnectInfo_start, ConnectInfo_stop, AcctInputOctets, AcctOutputOctets, CalledStationId, CallingStationId, AcctTerminateCause, ServiceType, FramedProtocol, FramedIPAddress, AcctStartDelay, AcctStopDelay' from radacct where 'AcctStartTime' >= '2011' AND 'AcctStartTime' <= '2012';

当我尝试运行它时,我收到以下错误:

  

ERROR 1136(21S01):列数与第1行的值计数不匹配

我正在阅读它,而且我发现的解决方案都没有帮助我。

2 个答案:

答案 0 :(得分:3)

您只有SELECT一个值,因为您使用'转义整个列列表。因此MySQL将其解释为字符串值,而不是列列表。

因此,您应该使用以下查询:

INSERT INTO `radacct_2011_2012` 
SELECT `RadAcctId`, `AcctSessionId`, `AcctUniqueId`, `UserName`, `Realm`, `NASIPAddress`, `NASPortId`, `NASPortType`, `AcctStartTime`, `AcctStopTime`, `AcctSessionTime`, `AcctAuthentic`, `ConnectInfo_start`, `ConnectInfo_stop`, `AcctInputOctets`, `AcctOutputOctets`, `CalledStationId`, `CallingStationId`, `AcctTerminateCause`, `ServiceType`, `FramedProtocol`, `FramedIPAddress`, `AcctStartDelay`, `AcctStopDelay` 
    FROM `radacct` 
    WHERE `AcctStartTime` >= '2011' AND `AcctStartTime` <= '2012';

在错误的情况下使用'的查询存在一般问题。您对'部分的列名称也使用了WHERE。 MySQL将'AcctStartTime' >= '2011'比较为false,因为字符串值(在此示例中为AcctStartTime2011)永远不会相等。如果要转义列名,则必须使用反引号(``)。

你应该阅读When to use single quotes, double quotes, and backticks in MySQL来区分不同的逃避可能性。

Tim提供a demo确认双引号(以及单引号)不能用于转义列名。

答案 1 :(得分:0)

请检查第一个表中的列数,并检查第二个表中的列数。

您还应该匹配列的顺序。即。

Table 1
col1 col2 col3 col4

Table 2
col1 col2 col3 col4

insert into table1 select col1,col2,col3,col4 from table2 where col1 = '2';

如果订单不匹配或第一个表中的列数大于或小于此值,则会出错。