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

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

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

INSERTとは、行を追加する、コンピュータのデータベース言語SQLにおけるデータ操作言語(DML)ステートメントの1つである

MySQL

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

1750閲覧

PHP MySQL 別テーブル条件参照の値複数を、別テーブルへINSERTする方法について

退会済みユーザー

退会済みユーザー

総合スコア0

INSERT

INSERTとは、行を追加する、コンピュータのデータベース言語SQLにおけるデータ操作言語(DML)ステートメントの1つである

MySQL

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/08/16 05:30

編集2019/08/18 21:19

この度は初めてこちらの掲示板にて質問させて頂きます。
よろしくお願い致します。

質問としましては、phpMyadminでの「別テーブルから値を参照してINSERTする方法」でして、
色々調べてみたのですが、構造/方法が分かりませんでしたため質問に至りました。

MySQLの初心者ですため、説明不足な点や方法に難がありましたら、
ご指摘いただければ幸いです。

やりたい事を簡単に申し上げますと、
TABLE.1 の条件(mozi01、mozi02、mozi03)に一致した値(cid)を、TABLE.2 へ書き込みしたく思います。
※ テーブルの構造を下記へ記載させていただきます。

1件だけの場合、

lang

1INSERT INTO `tbl2` ( id01, id02, txt01 ) 2VALUES ( 'CODE001', 10, (SELECT cid FROM `tbl1` WHERE `mozi01` Like 'AAA' AND `mozi02` Like '111' AND `mozi03` Like 'いいい') )

で書き込みをする事が出来ましたが、書き込むデータが 5回/日、500件/回 程度あります。
500件も毎回のクエリを実行(下記記載)するのも合理的ではない気がしますため、その方法をお尋ねしたく思っております。

lang

1INSERT INTO `tbl2` ( id01, id02, txt01 ) 2VALUES 3( 'CODE001', 10, (SELECT cid FROM `tbl1` WHERE `mozi01` Like 'AAA' AND `mozi02` Like '111' AND `mozi03` Like 'いいい') ), 4( 'CODE002', 10, (SELECT cid FROM `tbl1` WHERE `mozi01` Like 'BBB' AND `mozi02` Like '222' AND `mozi03` Like 'いいい') ), 5( 'CODE003', 10, (SELECT cid FROM `tbl1` WHERE `mozi01` Like 'CCC' AND `mozi02` Like '111' AND `mozi03` Like 'おおお') ) 6. 7. 8(500行)

初歩的な質問かと思いますが、ご教授いただければ幸いです。
どうぞ、よろしくお願い致します。

【テーブル構造】
■ TABLE.1

lang

1CREATE TABLE `tbl1` ( 2 `cid` int(6) NOT NULL, 3 `mozi01` varchar(5) NOT NULL, 4 `mozi02` varchar(5) NOT NULL, 5 `mozi03` varchar(5) NOT NULL 6) ENGINE=InnoDB DEFAULT CHARSET=utf8; 7 8INSERT INTO `tbl1` (`cid`, `mozi01`, `mozi02`, `mozi03`) VALUES 9(2, 'AAA', '111', 'いいい'), 10(6, 'AAA', '444', 'えええ'), 11(1, 'AAA', '555', 'あああ'), 12(3, 'BBB', '222', 'いいい'), 13(4, 'CCC', '111', 'おおお'), 14(5, 'WWW', '888', 'あああ'); 15 16ALTER TABLE `tbl1` 17 ADD PRIMARY KEY (`cid`), 18 ADD UNIQUE KEY `mozi01` (`mozi01`,`mozi02`,`mozi03`);

■ TABLE.2

lang

1CREATE TABLE `tbl2` ( 2 `id01` varchar(10) NOT NULL, 3 `id02` int(6) DEFAULT NULL, 4 `txt01` varchar(20) DEFAULT NULL 5) ENGINE=InnoDB DEFAULT CHARSET=utf8; 6 7ALTER TABLE `tbl2` 8 ADD PRIMARY KEY (`id01`); 9COMMIT;

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

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

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

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

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

8zca

2019/08/17 16:54

Like 'AAA' AND `mozi02` Like '111' AND `mozi03` Like 'いいい' の条件部分は別ソース(テキストファイルやCSV)に保存されているのでしょうか? でしたらSQLだけで完結するよりも移行用のスクリプトを書いたほうが速いと思います。
退会済みユーザー

退会済みユーザー

2019/08/18 21:11

ご指摘いただきありがとうございます。 条件部分については、APIの返り値として配列で取得している状態です。 移行用スクリプトとは、どの様なものになりますでしょうか。 お手数でなければ、URL等でも誘導いただければ幸いです。
8zca

2019/08/18 23:39

スクリプトはなんの言語で書いてももよいのですが、PHPのタグがついているのでPHPスクリプトでよいかと思います。 (移行用スクリプトというものが世に存在しているというわけではなく、ご自身でイチから作るプログラムファイルのことを指しています) PHPスクリプト内で以下の処理を書いて実行するかたちになりますね。 1. APIに接続し、結果を配列で取得(ここまでは既にあるコードを流用) 2. 配列をループしながらDBに接続をしてINSERTを行う
退会済みユーザー

退会済みユーザー

2019/08/19 00:34

早朝からご返信いただき、ありがとうございます。 現状の流れとしまして、 1. APIに接続し、結果を配列で取得 2. 1のデータをテーブルへ書き込み  T1. 取引先Tbl  T2. 受注Tbl となっています。 T2受注Tblへ取引先情報をINSERTしても良いのですが、 重複する情報(リピート取引先)がかなり多いため、取引先情報は取引先コード(オートナンバー)を振り別テーブルへ保存し、 T2受注Tbl書き込み時、T1取引先Tblを参照し、T1取引先コードを書き込みしたく思っております。 言葉足らずで失礼致しました。 そもそも、DBの構造が間違えているのでしょうか、、とも疑うべきなのでしょうか。。
8zca

2019/08/19 14:32

すでにT2は取引先IDを持っているということですね。 現状の処理でできているのであれば、質問されているような処理がなぜ必要なのかが不明になってきました。 何を実現したくて今の質問されている処理が必要なのでしょうか?
退会済みユーザー

退会済みユーザー

2019/08/28 05:53

返信にお時間がかかり、失礼致しました。 仰るとおり、T2. 受注Tbl は既に取引先IDを所持したテーブルとなっております。 そこで、取引先A社と新規に取引する場合、T2. 受注Tbl に情報を登録し、AIで取引先IDを連番で設定しますが、 数カ月後、再度A社と取引する場合、 既存の 取引先ID を取得したいと思っております。 用途としまして、毎回取引先の住所や情報をデータベースに保持していくのは 膨大なデータ容量となるため、取引先IDで関連付けしたいと思っております。 お伝えベタで申し訳ございませんが、伝わりましたでしょうか。 どうぞ、よろしくお願いいたします。
guest

回答2

0

ベストアンサー

自己解決いたしました。

投稿2021/04/14 12:57

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

insert文で、selectの結果をinsertすることが出来ます。

mysql5.6 insert

select文にtbl1に追加したいクエリを記述することで実現できそうですね。

投稿2019/08/18 00:49

takyafumin

総合スコア2335

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

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

退会済みユーザー

退会済みユーザー

2019/08/18 21:36

回答いただき、ありがとうございます。 こちらのリファレンスを確認しましたが、テーブルの条件が合う行を別テーブルに入れる例でしたが、 各行条件が異なる場合も利用できるのでしょうか。 少し調べさせていただきます。
takyafumin

2019/08/19 00:34

希望の条件がselect文として記載できるのであれば、利用可能です。 実行速度を気にしないのであれば、union句なども利用することで柔軟にクエリを記述できるかと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問