0

米国国勢調査の表が2つあります。1つには280万のレコードがあります。これは大きすぎるだけでなく、9桁の郵便番号などの必要のないデータが含まれています。5桁の郵便番号ではなく、9桁の郵便番号を使用せずに新しいテーブルを作成したいと思います。私はここで問題を抱えています、それは単に構文かもしれませんが、私は助けていただければ幸いです。

このクエリは、すべての行を一覧表示するために機能します。

SELECT DISTINCT ZIP5, 
STATE_CODE,STATE,
COUNTY_CODE,COUNTY_NAME,
CBSA_CODE,CBSA_TITLE, CBSA_LSAD,
METRO_DIVISION_CODE, METRO_DIVISION_TITLE, METRO_DIVISION_LSAD,
CSA_CODE, CSA_TITLE, CSA_LSAD
from zip_code_to_cbsa;

PHPでTABLEを作成しました。

$sql = 'CREATE TABLE `zip5_code_to_cbsa` (
`id` INT unsigned NOT NULL AUTO_INCREMENT,
`ZIP5` VARCHAR(5) NOT NULL,
`STATE_CODE` VARCHAR(2) NOT NULL,
`STATE` VARCHAR(2) NOT NULL,
`COUNTY_CODE` VARCHAR(3) NOT NULL,
`COUNTY_NAME` VARCHAR(50) NOT NULL,
`CBSA_CODE` VARCHAR(5) NOT NULL,
`CBSA_TITLE` VARCHAR(50) NOT NULL,
`CBSA_LSAD` VARCHAR(50) NOT NULL,
`METRO_DIVISION_CODE` VARCHAR(5) NOT NULL,
`METRO_DIVISION_TITLE` VARCHAR(50) NOT NULL,
`METRO_DIVISION_LSAD` VARCHAR(50) NOT NULL,
`CSA_CODE` VARCHAR(3) NOT NULL,
`CSA_TITLE` VARCHAR(50) NOT NULL,
`CSA_LSAD` VARCHAR(50) NOT NULL,
 primary key (id,ZIP5)
   )';

ここでINSERTを実行するために、次のことを試みましたが、エラーが発生します。

INSERT into zip5_code_to_cbsa
SELECT DISTINCT ZIP5, 
STATE_CODE,STATE,
COUNTY_CODE,COUNTY_NAME,
CBSA_CODE,CBSA_TITLE, CBSA_LSAD,
METRO_DIVISION_CODE, METRO_DIVISION_TITLE, METRO_DIVISION_LSAD,
CSA_CODE, CSA_TITLE, CSA_LSAD
from zip_code_to_cbsa;

mysql>     INSERT into zip5_code_to_cbsa
->     SELECT DISTINCT ZIP5, 
->     STATE_CODE,STATE,
->     COUNTY_CODE,COUNTY_NAME,
->     CBSA_CODE,CBSA_TITLE, CBSA_LSAD,
->     METRO_DIVISION_CODE, METRO_DIVISION_TITLE, METRO_DIVISION_LSAD,
->     CSA_CODE, CSA_TITLE, CSA_LSAD
->     from zip_code_to_cbsa;
**ERROR 1136 (21S01): Column count doesn't match value count at row 1**
mysql> 

ありがとう!

アップデート:

誰かが問題を見つけられない限り、これは今私のために働いているように見えますか?

$sql = 'INSERT into zip5_code_to_cbsa (ZIP5,STATE_CODE,STATE,
COUNTY_CODE,COUNTY_NAME,
CBSA_CODE,CBSA_TITLE, CBSA_LSAD,
METRO_DIVISION_CODE, METRO_DIVISION_TITLE, METRO_DIVISION_LSAD,
CSA_CODE, CSA_TITLE, CSA_LSAD)
SELECT DISTINCT ZIP5 as ZIP5,
STATE_CODE,STATE,
COUNTY_CODE,COUNTY_NAME,
CBSA_CODE,CBSA_TITLE, CBSA_LSAD,
METRO_DIVISION_CODE, METRO_DIVISION_TITLE, METRO_DIVISION_LSAD,
CSA_CODE, CSA_TITLE, CSA_LSAD
from zip_code_to_cbsa;
';

SELECT DISTINCT ZIP5 as ZIP5を使用すると、この一部としてDISTINCTを含めることができました。

4

2 に答える 2

2

選択した列のみに挿入する場合は、列名を明示的に指定する必要があります。

INSERT INTO tableName (colA, colB)
SELECT colA, colB
FROM tableName

サーバーはすべての列に値を挿入していると想定しているため、現在行っていることは正しくありませんが、指定した列数よりも少ないため、エラーが発生します

Column count doesn't match value count
于 2012-10-14T16:08:34.683 に答える
0

Why not do it in one go?

CREATE TABLE new_table AS SELECT DISTINCT ZIP5, 
STATE_CODE,STATE,
COUNTY_CODE,COUNTY_NAME,
CBSA_CODE,CBSA_TITLE, CBSA_LSAD,
METRO_DIVISION_CODE, METRO_DIVISION_TITLE, METRO_DIVISION_LSAD,
CSA_CODE, CSA_TITLE, CSA_LSAD
from zip_code_to_cbsa;

ALTER TABLE new_table ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY;
于 2012-10-14T16:09:57.500 に答える