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

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

ただいまの
回答率

90.23%

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

解決済

回答 4

投稿 編集

  • 評価
  • クリップ 2
  • VIEW 2,120

Guamstreet

score 29

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

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

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

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

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ページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • 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』ではありませんでした。訂正致します。

    キャンセル

回答 4

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;

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/11/19 00:55

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

    キャンセル

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;

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/06/02 12:15

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

    キャンセル

-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で質問しよう!

  • ただいまの回答率 90.23%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる