ここから本文です

【ORACLE-SQL】1本のSQLで、COMMENT名、カラム名、データが返却されるようなSELEC...

oga********さん

2010/12/2416:14:30

【ORACLE-SQL】1本のSQLで、COMMENT名、カラム名、データが返却されるようなSELECT文は作れませんか?

例えば、こんなテーブルがあったとします。
id / char(3)
mise / char(60)
tel / char(11)

ふつーにSELECTを発行したら
id mise tel
-------------------
001 A店 0110123012
002 B店 0110123013
003 C店 0110123014
みたいなデータが返ってきますよね。

ここに、COMMENTを付加したいのですが、どうすればいいでしょうか?

例えば
id mise tel
-------------------
ID 店名 電話番号
001 A店 0110123012
002 B店 0110123013
003 C店 0110123014
とか。

もしくは、以下のようにカラム名の代わりにコメントを表示するような形でも構わないのですが。
ID 店名 電話番号
-------------------
001 A店 0110123012
002 B店 0110123013
003 C店 0110123014

コメント名はUSER_COL_COMMENTSから取得すればよいかなーと思っていますが、
SQLとして組み立てることができなくて。
なにかよい方法はないでしょうか?あれこれ考えたのですが、思い浮かばなくて。。。

補足言葉足らずですいません。。
SQLに直接「ID」「店名」「電話番号」と、AS句で記述するのは、ナシです。
なぜなら、その名前を付けるには、
①user_col_commentsテーブルから、当該テーブルのcommentを取得するSQLを発行
②当該テーブルの各カラムにAS句を付けて、①で知ったcomment名を付加したSQLを発行
という2度の手順を踏まなければならないので。
あくまでも、1本のSQLで、行いたいのです。
すいませんが、よろしくお願いいたします。

この質問は、活躍中のチエリアン・専門家に回答をリクエストしました。

閲覧数:
4,709
回答数:
3
お礼:
500枚

違反報告

ベストアンサーに選ばれた回答

mik********さん

編集あり2010/12/2503:45:08

うん?

SELECT
id AS ID
,mise AS 店名
,tel AS 電話番号
FROM TABLE_NAME

って、ことじゃなくって??

「補足への回答」

そういう事ですか。「ORACLE」環境がないので、お力になれそうにありません。申し訳ないです。

「追記」

まぁ、UNIONなのですが、縦のものを横にしないといけないので、問題はそんなに簡単ではないのです。(ORACLEないので、USER_COL_COMMENTSのカラムは想像です)

SELECT
ID AS ID
,MISE AS MISE
,TEL AS TEL
FROM (SELECT TOP 1
COMMENTS_ID.COMMENTS AS ID
,COMMENTS_MISE.COMMENTS AS MISE
,COMMENTS_TEL.COMMENTS AS TEL
,'0' AS SORT
FROM USER_COL_COMMENTS
INNER JOIN USER_COL_COMMENTS AS COMMENTS_ID
ON COMMENTS_ID.TABLE_NAME = USER_COL_COMMENTS.TABLE_NAME
AND COMMENTS_ID.COLUMN_NAME = 'ID'
INNER JOIN USER_COL_COMMENTS AS COMMENTS_MISE
ON COMMENTS_MISE.TABLE_NAME = USER_COL_COMMENTS.TABLE_NAME
AND COMMENTS_MISE.COLUMN_NAME = 'MISE'
INNER JOIN USER_COL_COMMENTS AS COMMENTS_TEL
ON COMMENTS_TEL.TABLE_NAME = USER_COL_COMMENTS.TABLE_NAME
AND COMMENTS_TEL.COLUMN_NAME = 'TEL'
WHERE
USER_COL_COMMENTS.TABLE_NAME = 'Table1'
UNION
SELECT
ID AS ID
,MISE AS MISE
,TEL AS TEL
,'1' AS SORT
FROM TABLE1
) AS TABLE2
ORDER BY SORT,ID

しちゃえば、いいんだけど、この場合、SELECT項目分、INNER JOINしないといけないし。そもそも、「SELECT *」とかされちゃうと、今度は、テーブルの項目とってこなきゃいけないと思うし。「SELECT ID」されてるのか、「SELECT ID,TEL」されてるのかとか、知るよちないですからね。プログラムからSQLを作る時に指定するにしても、項目分「INNER JOIN」はナンセンスなような気がするし。あとは、ストアドにするとかしか案は浮かびません。

この回答は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

tok********さん

2010/12/2713:13:07

user_col_commentsのレイアウトが検索対象とは違うのでUNIONでは、目的の結果は得られないと思います。PL/SQLでカーソル等使えばできなくはないですが、そこまでやるなら素直に日本語名のビューを作るほうがわかりやすいかと思います。どうしても処理化にこだわるなら、バッチファイル(Linux系ならシェル?)で以下の処理を作成する手もありますが…
1.user_col_commentsからAS句を含んだSELECT文生成しファイル出力
2.上記SELECT文のスクリプトファイルをsqlplusで実行

swd********さん

2010/12/2500:48:56

質問者様が補足で書いてある
①user_col_commentsテーブルから、当該テーブルのcommentを取得するSQLを発行
②当該テーブルの各カラムにAS句を付けて、①で知ったcomment名を付加したSQLを発行

①のコメントを取得するところと、②の実データを取得するものをUNION句でつなげてみればいいのでは。

http://oracle.se-free.com/dml/08_union.html

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる