phpMyAdminを使った異なるテーブル間どうしでの任意部分のみのコピーを実現させたい。
- 評価
- クリップ 2
- VIEW 3,647
【 追 記 】
ここまで沢山の方のご支援、ほんとにありがとうございます。
誠にすいませんが、本質問について、改めて下記の質問をさせて頂きたいとおもいます。
(幾つか変更点を訂正したら、全体的にわかりにくくなってしまったので、改めて質問文作成し直しさせて頂きました)
私の質問が悪かったみたいで、誠にすいません。
改めて、下記、質問について、どうぞよろしくお願い致します。
【 質問内容はここからです 】
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テーブルへコピペと言う基本作業には、テーブルが、編集可能だろうが不可能だろうが、そもそも関係ないという事なのでしょうか?そのあたりも良く分かりません。
以上です。色々とすいませんが、引き続き、皆様からのご支援、どうぞよろしくお願い申し上げます。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
0
【前提】
Bテーブルの「recommended_points」以外のデータが既に挿入されている状態で
Bテーブルのidと一致するAテーブルのidで更新するやり方です。
-- BテーブルのidとAテーブルのidが一致するデータのみ抽出する(JOIN)
SELECT B.*,A.id,A.description
FROM Bテーブル B INNER JOIN Aテーブル A
ON B.id=A.id;
-- 対象をアップデート
UPDATE Bテーブル B INNER JOIN Aテーブル A
ON B.id=A.id
SET B.recommended_points=A.description;
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
Aテーブルのカラムが変化することでBテーブルのカラムが変化するということですよね?
プロシージャでやればいいような気はしますが、
むしろVIEWで表示するだけでは?
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
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文を修正してください。
UPDATE
table_b, table_a
SET
table_b.recommended_points = table_a.description
WHERE
table_b.recommended_product = table_a.product_name;
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
-2
自動でということは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 = ???の分部は、セッションとかで割り当てればいいと思います。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.11%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
s.t.
2016/06/29 13: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 15:00
「Aテーブル任意カラム⇒Bテーブル任意カラムに、全くの自動でコピーさせる事は、SQL構文で作成可能でしょうか?」
というのは、新たな行をINSERTするのではなく、Bテーブルの既存の行をUPDATEするという事でしょうか?
Guamstreet
2016/06/30 11:31
s.t.さんへ
表示されるのは、Aテーブルの方です。それからすいません、構造ですが、私が間違っていました。Aテーブルの方は、idカラムが『AI』ではありませんでした。訂正致します。