質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

3回答

6409閲覧

SELECTしたものとAUTO_INCREMENTの値をINSERTしたい

mao999

総合スコア111

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2016/08/04 05:06

都道府県・市町村のデータをmysqlのデータベースに登録する事を考えています。
SQL INSERT文を用いて、都道府県・市町村データを手打ちする以外の方法を探しています。

現在の都道府県・市町村データの取り方は、
https://teratail.com/questions/16583
のKosuke_Shibuyaさんの回答を参考しました。
ここに書かれている様に、mst_addressテーブル、mst_address_miniテーブルに取り込みました。

やりたいことは、データを利用するソフトの設計上、
そこからさらに都道府県のみのテーブル/市町村のみのテーブルに分割したいのです。
officialCodeで管理するのではなく、AUTO_INCREMENTなプライマリキーで管理したいのです。

都道府県データは、officialCode順でソートされた都道府県名を、AUTO_INCREMENTなプライマリキーで登録したいのです。
市町村データは、officialCode順でソートされた市町村名を、AUTO_INCREMENTなプライマリキーで登録したいのです。

後もう一歩な感じがするのですが、どなたか教えて頂けますでしょうか。

・都道府県リスト、市町村リスト

lang

1CREATE TABLE PrefectureList( PrefectureID smallint(3) unsigned NOT NULL AUTO_INCREMENT, 2 PrefectureName varchar(32) NOT NULL, 3 PRIMARY KEY (PrefectureID) 4 ) ENGINE=InnoDB; 5CREATE TABLE CityList( CityID int(10) unsigned NOT NULL AUTO_INCREMENT, 6 PrefectureID smallint(3) unsigned NOT NULL, 7 CityName varchar(64) NOT NULL, 8 PRIMARY KEY(CityID), 9 FOREIGN KEY(PrefectureID) REFERENCES PrefectureList(PrefectureID) 10 ) ENGINE=InnoDB;

・試してみたこと

lang

1INSERT INTO PrefectureList(PrefectureID,PrefectureName) SELECT 0,pref FROM mst_address_mini GROUP BY pref;

prefの値の順序で並んでいる様です。

lang

1mysql>INSERT INTO PrefectureList(PrefectureID,PrefectureName) SELECT 0,pref FROM mst_address_mini GROUP BY pref,officialCode ORDER BY officialCode; 2Query OK, 1896 rows affected (0.04 sec) 3Records: 1896 Duplicates: 0 Warnings: 0

重複している様でした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

こんな感じでしょうか?

SQL

1INSERT INTO PrefectureList 2( 3 PrefectureName 4) 5SELECT 6 pref 7FROM mst_address_mini 8GROUP BY 9 pref 10ORDER BY 11 MIN(officialCode) 12; 13 14INSERT INTO CityList 15( 16 PrefectureID 17 , CityName 18) 19SELECT 20 P.PrefectureID 21 , M.city 22FROM PrefectureList P 23JOIN mst_address_mini M 24ON P.PrefectureName = M.pref 25GROUP BY 26 P.PrefectureID 27 , M.city 28ORDER BY 29 MIN(M.officialCode) 30; 31

投稿2016/08/04 05:55

kutsulog

総合スコア985

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mao999

2016/08/04 06:13

ありがとうございます! 解決しました。 JOIN、ON、MIN等について調べてみます。
guest

0

ななめ読みしかしていませんが

SELECT 0,pref FROM mst_address_mini GROUP BY pref,officialCode

しているのでしたら、pref,officialCodeのユニークな数だけ行数ができますが
出力されるのは0,prefなので当然データがかぶる可能性が大
また集計もしていないのにgroup byを使うのはSQL的にはまずいですね

投稿2016/08/04 05:47

yambejp

総合スコア114769

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mao999

2016/08/04 06:21

ご回答有り難うございました。 自分はSQLの基本がまだ分かっていない様で、少し調べる必要がありそうですね。
guest

0

もしかして2番目のSQLからPrefectureIDと併せて0を除けばよろしいのでは、自動で継続されます。

投稿2016/08/04 05:54

A.Ichi

総合スコア4070

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mao999

2016/08/04 06:21

ご回答有り難うございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問