2017-11-22 20 views
1

あるテーブルから別のテーブルにデータをコピーしようとしています。私はそれを実行しようとすると、私は次のエラーを取得するあるテーブルから別のテーブルにデータをコピーするエラー1136

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): Column count doesn't match value count at row 1

私はそれについて読んでいないとソリューションのどれよ、私はこれを使用していますそのことについては

私が見つけたのは私を助けました。

+2

テーブルの定義が必要です –

+2

あなたは ''でカラムリストからエスケープしているので1つの値しか設定しません –

答えて

3

'で列全体のリストをエスケープするため、SELECTは1つの値のみです。したがって、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を指定して、二重引用符(および一重引用符も)を使用して列名をエスケープできないことを確認してください。

+0

Sebastianありがとうございました。 それはトリックでした。 –

+0

あなたは大歓迎です! –

+1

MySQLのカラム名をエスケープするために二重引用符を使用できないことを自分で確認できます[このデモでは](http://rextester.com/JAG30958)。 –

0

最初の表の列数を確認し、2番目の表の列数を確認してください。

また、列の順序も一致させる必要があります。即ち

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'; 

順序が一致していない場合は、エラーを与えるまたは列のない最初のテーブルに大きいか小さいです。

+1

これはおそらくコメントになるはずです。 –

+0

すでに5回確認しています。エラーはシンプルなものでした。 ' –

関連する問題