プロが教えるわが家の防犯対策術!

テーブル表のいくつかの列と、もう1つテーブル表のいくつかの列を選んで、新しいテーブル表を作るにはどういった文がありますか?

よろしくお願いします。

A 回答 (6件)

Oracleの場合、"create table **** as select ~"


を実行すれば、検索結果に従ったテーブルを作成できます。

Oracleのユーザ"scott"で説明します。

ユーザ"scott"で以下のSelect文を実行してください。

[実行SQL文]
select dept.deptno, dept.dname, emp.empno, emp.ename
from dept, emp
where dept.deptno=emp.deptno and
dept.deptno=10;
 ↓
[実行結果]
DEPTNO DNAME EMPNO ENAME
------------------------------------------
10 ACCOUNTING 7782 CLARK
10 ACCOUNTING 7839 KING
10 ACCOUNTING 7934 MILLER


次に、この検索結果を元に新規にテーブルを作成するSQL文を実行します。

[実行SQL文]
create table test1 as
select dept.deptno, dept.dname, emp.empno, emp.ename
from dept, emp
where dept.deptno=emp.deptno and
dept.deptno=10;


上記のテーブルの内容を確認します。

[実行SQL文]
select * from test1;
 ↓
[実行結果]
DEPTNO DNAME EMPNO ENAME
------------------------------------------
10 ACCOUNTING 7782 CLARK
10 ACCOUNTING 7839 KING
10 ACCOUNTING 7934 MILLER
    • good
    • 0

単純な方法ですが、以下のような方法はどうでしょうか?



・create_tableコマンドで、新しいテーブルを作成する。
・insert into 新テーブル名 select ~~ from ~~;
と新しいテーブルにデータを投入するsqlを発行する。

あまり、難しく考えないで簡単なコマンドを組み合わせで
もできるかと思います。
(注.ユーザサービス中はDBの整合性を考えるとできない
コマンドですので、サービス時間外にしてください。)

fm0606さんの質問と回答ズレてますか?
    • good
    • 0

再びstorkです。



>そのテーブルの中にはvarchar型とかそういった情報とかはいらないのですか
SQLサーバーで確認したところ、もとの列のデータ型が引き継がれるようです。
列名はselect句で使用している列名がそのまま新しいテーブルの列名になります。

その他の製品については、詳しくは分かりませんがほぼ同じだと思います。

>ただ単にテーブルを作ってそのまま上の文で作れるのでしょうか?
#3の例はテーブルを作成しますので、あらかじめテーブルを作成する必要はありません。
既にテーブル名が存在する場合は、エラーになるか確認のメッセージが表示されると思います。

既に存在するテーブルに追加する場合は、oribeyakiの回答にあるようにinsert into句を使用します。

oribeyakiさんも書いてらっしゃいますがデータベースは何を使っているんですか?ものによっては製品固有の部分がひっかかるかもしれません。

この回答への補足

何度もすみません。
オラクル8iを使っています。
何度もためしているのですが、うまいこといきません。

WHEREの条件にはなにをいれればよいのですか?
前の文ではある元のテーブルの条件一つしか入ってなかったですが・・・。
お手数かけます。

補足日時:2001/09/27 12:57
    • good
    • 0

例をひとつ。



select tableA.col1,
tableB.col1
into 新しいテーブル名
form tableA join tableB
on tableA.col1 = tabeleB.col1
where tableA = 'XXX'

普通にselect文を作成した後に、fromの前に「into 新しいテーブル名」を入れるだけです。

マウス操作でもっと簡単にできますが、製品ごとの固有の部分になるのでパスします。

この回答への補足

質問です。新しいテーブルと書いてあるのですが、そのテーブルの中にはvarchar型とかそういった情報とかはいらないのですか?
ただ単にテーブルを作ってそのまま上の文で作れるのでしょうか?

補足日時:2001/09/27 11:00
    • good
    • 0

おはようございます。



DBが記入されてないので、代表的なところでいくつか・・・

Accessの場合
「Select 必要項目 Into 新規テーブル名 From 元テーブル1と元テーブル2のリレーション Where 条件」
の1文でできます。

Oracleの場合
2文になります。
「Create Table 新テーブル(必要項目)」
「Insert Into 新テーブル名 (入力項目) Select 必要項目 From 元テーブル1と元テーブル2のリレーション Where 条件」

こんな感じです。

実表を作る必要が無いのであれば、仮想表(Viewとかクエリー)で対応することも可能です。

また、SQL文といってもDBにより少しづつちがうので、できればDBの種類だけでも書いておいてくださいね。

何かあれば補足してください。
    • good
    • 0

SELECT ~ INTO ~



こちら(参考URL)はPostgreSQLのものですが、お使いのDBMSでも使用出来るはずです。

参考URL:http://pjam.jpweb.net/pgsql-doc/ej/user/sql-sele …

この回答への補足

素人なもので、あのホームページではちょっとわかりかねます。

なにか簡単な例文を書いていただけるととてもありがたいです。お願いします。

補足日時:2001/09/27 10:19
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!