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

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

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

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

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

Q&A

解決済

4回答

5906閲覧

phpMyAdminを使った異なるテーブル間どうしでの任意部分のみのコピーを実現させたい。

Guamstreet

総合スコア31

MySQL

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

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

0グッド

2クリップ

投稿2016/06/29 04:46

編集2016/06/30 03:50

【 追 記 】
ここまで沢山の方のご支援、ほんとにありがとうございます。
誠にすいませんが、本質問について、改めて下記の質問をさせて頂きたいとおもいます。
(幾つか変更点を訂正したら、全体的にわかりにくくなってしまったので、改めて質問文作成し直しさせて頂きました)

私の質問が悪かったみたいで、誠にすいません。

改めて、下記、質問について、どうぞよろしくお願い致します。

【 質問内容はここからです 】

phpMyAdminを使ってデータベース管理を行っています。

phpMyAdminにおいて、カラム構造の異なる2つのテーブル、Aテーブル及びBテーブルがあります。

A、Bテーブル、それぞれの内容は、以下の通りです。

【 Aテーブル 】(社内excelデータをCSVとしてphpMyAdminに取り込み)
int id ・・・(NULL)
varchar product_name
datetime release_date
varchar description

【 Bテーブル 】
int id ・・・ PrimaryKey(Auto_increment)
varchar customer_name
varchar prospective_client
varchar recommended_product
varchar recommended_points(NULL)
datetime entry_date

この環境において、下記の内容を実現させたいです。

1,Aテーブルのdescriptionカラムの任意idレコードに入力された内容を、Bテーブルのrecommended_pointsカラムの任意idレコードを指定して(NULL)の部分にコピーしたい。

コレが実現可能なSQL構文を教えて欲しいです。

但し!

Aテーブルには、以下の表示がされていて、編集可能な状態になっていません。

"This table does not contain a unique column. Grid edit, checkbox, Edit, Copy and Delete features are not available."
(Aテーブルは、excelで作成した社内データを、CSVデータとしてphpMyAdminデータベースに取り込んでいます。取り込んだデータのAテーブルを、最初に開くと、このような表示がされてしまいます)

以上の様な状況を、併せ踏まえた上で、

【 実現させたい事 】
①Aテーブルを編集可能にする ⇒ ②Aテーブルdescriptionカラムの任意idレコードの内容コピー ⇒ ③Bテーブルのrecommended_pointsカラムの任意のidレコード(NULL)にコピペ

と言う一連の作業全てを、SQL構文でやらせたい。

作成可能なら、そのSQL構文が、どのようになるか教えて欲しいです。
また、もし可能だとしたら、phpMyAdminのどの画面で、SQLを実行させれば良いでしょうか?
Aテーブルの画面(Aテーブルを表示させた状態)からSQL構文を実行させるのでしょうか?
Bテーブルの画面(Bテーブルを表示させた状態)からSQL構文を実行させるのでしょうか?
それとも、また別の画面からでしょうか?

"INSERT INTO Bテーブル SELECT * FROM Aテーブル WHERE id = ○○;"

と言った、基本的なSQL構文は、一応、理解しているつもりなのですが、これをどの様に発展させて実行させれば良いか、よくわかりません。

あと、通常、手作業で行われるであろう『Aテーブルを編集可能にするユニークカラムの追加等』を、SQLでやらせようと言うのは、実現させたい結果を得る為に、私自身は、必要な作業だと、そう認識しています。しかし、これについては、そもそも必要ないものでしょうか?Aテーブル一部コピー⇒Bテーブルへコピペと言う基本作業には、テーブルが、編集可能だろうが不可能だろうが、そもそも関係ないという事なのでしょうか?そのあたりも良く分かりません。

以上です。色々とすいませんが、引き続き、皆様からのご支援、どうぞよろしくお願い申し上げます。

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

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

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

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

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

s.t.

2016/06/29 04:56

"This table does not contain a unique column. Grid edit, checkbox, Edit, Copy and Delete features are not available." が表示されるのはAテーブルでしょうか?Bテーブルでしょうか?また、表示されるテーブルは本当に上記の定義通りになっていますでしょうか?
tanat

2016/06/29 06:00

「Aテーブル任意カラム⇒Bテーブル任意カラムに、全くの自動でコピーさせる事は、SQL構文で作成可能でしょうか?」 というのは、新たな行をINSERTするのではなく、Bテーブルの既存の行をUPDATEするという事でしょうか?
Guamstreet

2016/06/30 02:31

s.t.さんへ 表示されるのは、Aテーブルの方です。それからすいません、構造ですが、私が間違っていました。Aテーブルの方は、idカラムが『AI』ではありませんでした。訂正致します。
guest

回答4

0

こんにちは。

①Aテーブルを編集可能にする ですが、エラーにあるように
「ユニークなカラムがないから編集できない」となっています。
phpMyAdminでは主キーがないと編集ができない仕様になっています。

ですので、まずは、一度table_aを空にし、
table_aの構造でidカラムを主キー&Auto-Incrementに設定にしてみてください。
その後、再度CSVをインポートします。
ちなみに、CSVにはidカラムがありますか?
ない場合、インポートのファイル設定でカラムを指定することが必要です。
参考URL

②Aテーブルdescriptionカラムの任意idレコードの内容コピー
③Bテーブルのrecommended_pointsカラムの任意のidレコード(NULL)にコピペ

こちらは、table_a.descriptionカラムの内容を
既に存在するtable_b.reommended_pointsカラムにコピーするということでしたら、以下のSQLでできると思います。

※WHERE文は両テーブルのカラム名からproduct_nameで紐付られているのかと推測しました。
もし、idなど他カラムで紐付られている場合は、WHERE文を修正してください。

SQL

1UPDATE 2 table_b, table_a 3SET 4 table_b.recommended_points = table_a.description 5WHERE 6 table_b.recommended_product = table_a.product_name;

投稿2017/06/02 03:09

編集2017/06/02 03:13
s-washion

総合スコア204

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

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

s-washion

2017/06/02 03:15

すいません、投稿が1年前でした… よく見てなかったです。
guest

0

Aテーブルのカラムが変化することでBテーブルのカラムが変化するということですよね?
プロシージャでやればいいような気はしますが、
むしろVIEWで表示するだけでは?

投稿2016/06/30 05:55

yambejp

総合スコア114784

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

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

0

ベストアンサー

【前提】
Bテーブルの「recommended_points」以外のデータが既に挿入されている状態で
Bテーブルのidと一致するAテーブルのidで更新するやり方です。

SQL

1-- BテーブルのidとAテーブルのidが一致するデータのみ抽出する(JOIN) 2SELECT B.*,A.id,A.description 3FROM Bテーブル B INNER JOIN Aテーブル A 4ON B.id=A.id; 5 6-- 対象をアップデート 7UPDATE Bテーブル B INNER JOIN Aテーブル A 8ON B.id=A.id 9SET B.recommended_points=A.description;

投稿2016/06/29 07:17

roast_chicken

総合スコア254

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

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

Guamstreet

2017/11/18 15:55

質問初心者だったので、ベストアンサーを決めなくてはいけないのに、やっておりませんでした。大変、申し訳ありませんでした。1年以上前の質問です。大変申し訳ありませんでした。今後は気を付けます。
guest

0

自動でということはphpmyadminで手動でやるわけではないと思うので

Aテーブルのdescriptionを取り出してBテーブルのrecommended_pointsにinsertすればよいのではないでしょうか?

イメージとしてはこんなところですかね?未検証ですが...

$sql = "INSERT INTO Aテーブル(product_name,release_date,description ) VALUES (?, ?, ?)"; $stmt = $pdo->prepare($sql); $stmt->execute([ product_nameに入れたい内容, release_dateに入れたい内容, descriptionに入れたい内容 ]); $stmt = $pdo->query("SELECT description FROM Aテーブル WHERE id = ??? "); $row = $stmt->fetch(); $description = $row['description ']; $sql = "INSERT INTO Bテーブル(customer_name, prospective_client,recommended_product,recommended_points,entry_date ) VALUES (?, ?, ?, ?, ?)"; $stmt = $pdo->prepare($sql); $stmt->execute([ customer_nameに入れたい内容, prospective_clientに入れたい内容, recommended_productに入れたい内容, $description, entry_dateに入れたい内容 ]);

WHERE id = ???の分部は、セッションとかで割り当てればいいと思います。

投稿2016/06/29 05:00

編集2016/06/29 05:17
earnest_gay

総合スコア615

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問