カラムをコピーして、新規カラムを作成する方法

このQ&Aのポイント
  • カラムをコピーして新たなカラムを作成する方法について説明します。
  • INSERTコマンドを使用してカラムをコピーして新しいカラムを作成しようとすると、特別な実行権限が必要になる場合があります。
  • テーブルをコピーして新しいテーブルを作成する場合とは異なり、カラムをコピーして新しいカラムを作成する方法では、既存のカラムの内容がそのまま新しいカラムにコピーされます。
回答を見る
  • ベストアンサー

カラムをコピーして、新規カラムを作成したい

既にあるカラムをコピーして、新たなカラムを作成したいのですが、うまくいきません。 どうしたらいいでしょうか? INSERT INTO `rtable`.`3_column` SELECT * FROM `rtable`.`2_column` 実行すると、下記エラーになります。 #1142 - INSERT command denied to user 'DBユーザー名'@'localhost' for table '3_column' 通常のINSERTなら出来るのですが、この場合のINSERTは、何か特別な実行権限になるのでしょうか? 環境:レンタルサーバ ちなみに、テーブルをコピーして、新規テーブル作成するのは、下記で出来たのですが、 「テーブルコピー」と「カラムコピー」では、何が違うのでしょうか? INSERT INTO `データベース名`.`newtable` SELECT * FROM `データベース名`.`oldtable` ;

  • re999
  • お礼率61% (476/777)
  • MySQL
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • aa_akiya
  • ベストアンサー率100% (21/21)
回答No.1

INSERT文は行データを追加するためのもので列データを追加するものではありません。 3_column列がrtableテーブルに存在するならUPDATE文を使用しましょう。 UPDATE `rtable` SET `3_column` = `2_column`; 3_column列がrtableテーブルに存在しないなら3_column列を追加後に上記のUPDATE文を流します。 列追加のためのSQLは以下の通りです。 ALTER TABLE `rtable` ADD `3_column` [データ型]; ([データ型]部分は3_columnのデータ型にする必要があります。  INTならALTER TABLE `rtable` ADD `3_column` INT;)

re999
質問者

お礼

回答ありがとうございました。 大変参考になりましたー

関連するQ&A

  • PostgreSQLのカラムに"user"という名前のカラムがある場合のデータ表示について

    PostgreSQLを使い始めたのですが、わからないことがあるので知恵をおかしください。 ユーザー名を管理するテーブルを以下のように作成しました。 テーブル:table  |No|user|from |  |1 |Atom|tokyo|  |2 |Boss|izu |  |3 |Cat |chiba| このテーブルのデータをuser部分のみ表示するに以下のSQL文を作成しました。  SELECT user FROM table 上記のSQLを実行したのですが、userのカラム部分がcurrent_userとテーブルのカラムではなくセッションの情報を取得してきてしまいます。 試しに  SELECT * FROM table で実行するとテーブルのデータを取得でき、  SELECT table.user FROM table で実行するとsyntax errorとエラー表示されデータが結果が表示されません。 userをセッション情報としてではなく、テーブル(table)のデータとして取得したい場合はどのようにしたらいいのでしょうか? よろしくお願いします。

  • どのテーブルのどのカラム???助けて下さい

    会社に入社したばかりなのですが、プログラミングをしています。 で質問なのですが データベースのselect文で ある名称を取ってこないといけないときに どこのテーブルとどこのテーブルのどのカラムとどのカラムが 等しいときの名称を取ってくる様なselect文が作成できません テーブル設計書のカラム名を見ただけではわかりません こういった場合はどうすればいいのでしょうか 設計書とかにどのカラムが等しいときとか どのテーブルのどの名称とか普通そういう資料があるのでしょうか select文の構文は判ってもテーブルの仕様みたいなのがわからないので 対応できません 全然わかりません。助けてください

  • ACCESS SQLのINSERTについて

    TBLというテーブルにINSERT文を使用して1行レコードを追加したいです。TBLテーブルのカラムAにはシステム日付を、カラムBには別テーブルのselect count(*)の実行結果を挿入したいのですがうまくいきません。何か良い方法はございませんでしょうか? INSERT INTO カウンタ統計 ( [DATE], USER_COUNT ) VALUES (date(), (SELECT COUNT(*) FROM hiplus_HW_USER)); ※日付は問題なく挿入できるのですがSELECT文の結果が挿入できない状況です。宜しくお願いします.

  • 同一のカラム値をもつもの同士の中での連番

    こんにちは。 タイトルが上手くまとまっておらず、すみません。 以下のようなことを実現したいと思っております。 カラムc1(INT型)とカラムc2(INT型)をもつテーブルt1があるとします。 「INSERT INTO t1(c1) VALUES(1);」などと実行した場合、自動的にカラムc2が以下のように同一のカラムc1の値同士の中で連番されていくようにするテーブル定義はできないでしょうか。 ↓「SELECT c1, c2 FROM t1 ORDER BY 1 ASC, 2 ASC;」を実行した様子 1,1 1,2 2,1 3,1 3,2 ※ フォントの違いによる形崩れは免れないと思い、CSVのようにカラムの区切りをカンマで、レコードの区切りを改行で表現しています。 言うまでもなく、c1とc2の組は必然的にユニークになります。 ご教授、お願いします。

  • 【SQL文】Insert into文で文法エラー

    insert into文で思ったような結果がでません。SQL文にお詳しい方、ご教授いただけますでしょうか? SQLは初心者レベルです。 期待している結果: テーブルT-BBSにT-USRのusr-id全リストを入れて、T-BBSのa,b,cには固定の数値を入れたいと思っています。 テーブル例: テーブル名:T-BBS ,カラム:usr-id,a,b,c, テーブル名:T-USR, カラム:usr-id 結果 user-id | a | b | c 2 |1 | 2 | 3 3 |1 | 2 | 3 4 |1 | 2 | 3 7 |1 | 2 | 3 私が考えたSQL文ですが、 INSERT INTO T-BBS(SELECT user-id FROM T-USR,1,2,3) →×(文法エラー) INSERT INTO T-BBS(user-id,a,b,c) VALUES (SELECT user-id FROM T-USR,1,2,3)→× 文法エラー INSERT INTO T-BBS(user-id,a,b,c) VALUES ((SELECT user-id FROM T-USR),1,2,3)→×サブクエリが複数行を含んでいる ちなみにデータベースはH2 Databaseというものみたいですが、mySQLと方言は同じという認識をもってます。 以上宜しくお願いします。

    • ベストアンサー
    • MySQL
  • テーブル名をカラムとして取得する方法

    テーブル名をカラムとして取得する方法はありますでしょうか? オラクル8とVB6でプログラムを組んでいます。 例 TABLE Aの内容 カラム1 1 2 3 TABLE B カラム1の内容 4 5 6 SQLは簡略化してかきます。下記のSQLを実行した場合、 select A.カラム1 from A union select b.カラム1 from b 1 2 3 4 5 6 を取得できます。 例えば、上記で、SQL実行後、 下記のような値を取得したいです。 1 ,Aのテーブルだよ 2 ,Aのテーブルだよ 3 ,Aのテーブルだよ 4 ,Bのテーブルだよ 5 ,Bのテーブルだよ 6 ,Bのテーブルだよ それぞれのテーブルの名前を別名で結果に格納したいのです。 何か方法はありますでしょうか? なければ、unionせずに、2回SQLを発行し、それぞれに、 プログラム上で、「Aのテーブルだよ」を後で挿入したいと思っています。

  • 動的に生成したカラムを使ったFUNCTION

    レコード型の使用方法がわからないので、悪戦苦闘しております。。。 【やりたいこと】 ・あるテーブルのある項目でGROUP BYし、別の項目事に集計した結果を  カラムとして出力 クロス集計と呼ぶのでしょうか? 上記の結果表を取得出来るFUNCTIONを作成したいのです。 【サンプルデータ】 CREATE TABLE t1 ( col1 integer ,col2 integer ,val integer ); INSERT INTO t1 VALUES( 1, 1, 1, ); INSERT INTO t1 VALUES( 1, 1, 1, ); INSERT INTO t1 VALUES( 2, 1, 1, ); INSERT INTO t1 VALUES( 2, 1, 1, ); INSERT INTO t1 VALUES( 3, 2, 1, ); INSERT INTO t1 VALUES( 3, 2, 1, ); INSERT INTO t1 VALUES( 4, 2, 1, ); INSERT INTO t1 VALUES( 4, 2, 1, ); ※ここでcol1、col2ともどんなデータが入っているか、わからないとします。 なので、まずcol2をDISTINCTしたものを求めました。 SELECT DISTINCT col2 FROM t1; この結果をカーソルを使ってループし、動的にカラムを作成するSQLを 作りました。 DECLARE cu refcursor; rec record; str text := 'SELECT col1 '; str2 text := ' FROM t1 GROUP BY col1 ORDER BY col1'; BEGIN OPEN cu FOR EXECUTE SELECT DISTINCT col2 FROM t1; LOOP FETCH cu INTO rec; IF NOT FOUND THEN EXIT; END IF; str := str || ', SUM( CASE WHEN col2 = rec.col2 THEN val END ) AS col_name' || rec.col2; END LOOP; CLOSE cu; RAISE INFO 'key = %', str || str2;  動的に生成されたSQLを実行したい ------------------------------------------------------- ※ちなみに動的に生成されたSQLはこんな感じになります。 SELECT col1 ,SUM( CASE WHEN col2 = 1 THEN val END ) AS col_name1 ,SUM( CASE WHEN col2 = 2 THEN val END ) AS col_name2 FROM t1 GROUP BY col1 ORDER BY col1; ------------------------------------------------------- あとがわかりません。。動的なカラムなので、どうやって取得すれば 良いのでしょうか? レコード型を使うと上手くいくのでしょうか? 試しにFUNCTION( func1 )の戻り値をRETURNS SETOF record として 内部で rec1 record; : :  FOR rec1 IN EXECUTE str || str2 LOOP RETURN NEXT rec1; END LOOP; RETURN; SELECT * FROM func1(); とやってみたら、 ERROR: a column definition list is required for functions returning "record" となります。。。 カラムの定義が必要だと言われているんだと思いますが、カラムは 動的になっているので、どうすれば良いのでしょうか??

  • SELECT文で、指定カラム以外の全カラムを一括指定って可能でしょうか

    SELECT文で、指定カラム以外の全カラムを一括指定って可能でしょうか? MYSQLサーバのバージョンは5.0.77です。 下記のように「*」を使用して指定テーブルの全カラムを表示する方法がありますが、 SELECT TableName.* FROM TableName 上記の逆で、指定テーブルの指定カラム以外の全カラムを一括指定って可能でしょうか? 例えば下記のような「^」みたいな、又は同等な書き方があれば良いなと思ってまして。 SELECT TableName.^ColumnName1 FROM TableName ちなみに、下記のように一つ一つ表示したいカラムを指定する方法以外です。 SELECT TableName.ColumnName2 , TableName.ColumnName3 FROM TableName よろしくお願いします。

    • ベストアンサー
    • MySQL
  • INSERT文のSELECT部分の更新

    insert into selectについて教えてください。 あるテーブルからselectした値と、連続する値を 同時にinsertするする事はできますでしょうか? 使用DBはOracle9iです。 例えば、以下のようなテーブルがあった時に テーブルA カラム1 カラム2 カラム3 カラム4 この時に、カラム1,カラム2,カラム3を別のテーブルからselectし、 カラム4には「100001」から順に値を1ずつ増やしてながら セットしたい場合、1つのSQLで実行する事は可能でしょうか? ヒントなどいただけたらと思います。よろしくお願いします。

  • selectの内容によって、登録するカラムを変えたい

    selectの内容によって、登録するカラムを変えたい selectであるテーブルからある値Aをとってきます。 値Aが1の時は別テーブルの金額1に登録、2の時は金額2に登録、3の時は金額3に登録 という処理を行いたいです。 同一レコードに対して複数の金額がある事があります。 テーブル1(取得テーブル) ------------------ キー 値A 金額 1   1  500 1   3  300 2   3  200 ------------------ テーブル2(登録テーブル) ------------------ キー 金額1 金額2 金額3 1   500  0  300 2    0  0  200 ------------------ いま、 insert into テーブル2 SELECT 項目 from テーブル1 というように1つのSQLで、登録、削除をしようとしていますが 可能でしょうか?。方法がよく分かりません。