我试图将数据从一个表复制到另一个表。
就此而言,我使用了这个:
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行的值计数不匹配
我正在阅读它,而且我发现的解决方案都没有帮助我。
答案 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,因为字符串值(在此示例中为AcctStartTime
和2011
)永远不会相等。如果要转义列名,则必须使用反引号(``
)。
你应该阅读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';
如果订单不匹配或第一个表中的列数大于或小于此值,则会出错。