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

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

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

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

2回答

4237閲覧

Oracle SQL 結合後にカラムを取得したい

tqkqt0

総合スコア155

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2017/03/09 00:24

編集2017/03/09 00:27

下記のようなコードがあります。
atabとbtabというテーブルを結合させたabtabテーブルから値をとりたいのですが、うまくいきません。

SQL

1select abtab.btabのカラム名 from (select * from atab left outer join btab on atab.id = btab.a_id)as abtab

最初を__select atab.*__とすれば全テーブル情報はとれました。

また、結合後のatabをdescなどでカラム一覧を表示することは可能でしょうか?

よろしくお願いいたします。


補足
abtabですが実際の環境では2つ結合ではなく、4テーブル結合しようとしています。

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

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

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

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

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

guest

回答2

0

ベストアンサー

直接の回答ではありませんが、
CREATE VIEW V1 AS SELECT ... ;
DESC V1
DROP VIEW V1 ;
でいかがでしょうか?

投稿2017/03/09 00:47

Orlofsky

総合スコア16415

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

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

tqkqt0

2017/03/09 01:05

Viewですか。それは思いつかなかったです。 が、できれば結合でとりたいですね… しかしいい意見だと思うので早速サンプル作ってみます!ありがとうございます。
tqkqt0

2017/03/09 02:31

Viewで作成してみようと試みたのですが、 4テーブルでの重複カラムが多く、重複エラーになってしまいます。 カラム数もかなり多いのですが、ひとうひとつ潰していくしかないのでしょうか。。
Orlofsky

2017/03/10 00:16 編集

1つのビューに同じ列名が複数あるとコンピュータはどちらの列を使ったら良いか困ってしまうので、 SELECT A.ID AS CUSTOMER_ID , B.COL1 ... のように必要により列の別名を設定します。 コードを書くのに面倒くさがらないように、わたしはシェアウェアの秀丸エディタを使っています。 DESC TABLE_NAME1 の結果から BOX範囲選択 http://amaotolog.com/pc-benri/64 でコピペして効率的に作業します。 プログラムは最初に書く時楽するより、後でメンテナンスする人が楽なように心掛けましょう。
guest

0

「うまくいかない」というのは、「ORA-00918: 列の定義が未確定です。」となるということでしょうか?
その場合は、SELECT句でテーブルを指定して、どのテーブルの列であるのかを確定させてください。

例えば atabbtab の両方に id という列がある場合は以下のとおりです。

sql

1SELECT atab.id, btab.id 2FROM atab LEFT OUTER JOIN btab 3ON atab.id = btab.a_id

実際には以下のように、表別名と列別名をつけたほうが良いでしょう。

sql

1SELECT a.id AS a_id, 2 b.id AS b_id 3FROM atab a 4LEFT OUTER JOIN btab b 5ON a.id = b.a_id

列名の重複がなくなるような列別名が、自動で生成される機能はありません。
地道に指定してください。

SELECT結果の列の一覧を DESC のように取得する方法ですが、Orlofsky さんのようにビューを作るのが簡単そうですね。
または、SQL Developer のようなツールで CSV か Excel にエクスポートして、1行目のタイトル行を活用してはどうでしょう?
(普通は、逆に、取得したい列の一覧が要件としてあって、それをSELECT句に指定していくのだと思いますが。)

投稿2017/03/09 10:13

q1701

総合スコア274

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問