• 締切済み

SQLについて教えてください

お世話になっております。 以下、取得したい内容です。 この内容に対して、どのようにSQLを書けばよいか良いか教えて頂きたいです。 (1)DBの全テーブルに対して特定のカラムを取得したい。(カラム名はA,Bとする) (2)取得したカラム.Aに格納されている各値に対して、カラム.Bの各レコードの項目には何の値が格納されているか知りたい。 DBはオラクルですが、オラクルでしか使えないSQL構文はつかないようにしたいです。 自分で考えたSQLは、 SELECT A,B FROM * GROUP BY A,B ですが、そもそも全テーブルを指定する際に使用するのが、「*」では正しくないような気もします。 説明がつたなくて申し訳ございません。 宜しくお願い致します。 ・テーブルイメージ テーブル.test1 +--------+------+ | No | A | B | +--------+------+ | 01 |AA| 1 | | 02 |AA| 1 | | 03 |AB| 2 | | 04 |AB| 2 | | 05 |AC| 3 | | 06 |AC| 3 | | 07 |AC| 3 | +--------+------+ テーブル.test2 +--------+------+ | No | A | B | +--------+------+ | 01 |AA| 1 | | 02 |AA| 1 | | 03 |AB| 2 | | 04 |AB| 2 | | 05 |AC| 1 | | 06 |AC| 3 | | 07 |AC| 3 | +--------+------+ テーブル.test3 +--------+------+ | No | A | B | +--------+------+ | 01 |AA| 3 | | 02 |AA| 1 | | 03 |AC| 2 | | 04 |AC| 3 | +--------+------+

  • Oracle
  • 回答数1
  • ありがとう数0

みんなの回答

  • bardfish
  • ベストアンサー率28% (5029/17765)
回答No.1

FROMのあとにはテーブル名のみですからアスタリスクはエラーになりますね。 で、実はOracleには普段見えない管理テーブルが存在します。 TABLE NAMEとCOLUMN NAMEという項目名があるテーブルなんですが、テーブルの名前は忘れてしまいましたw このテーブルにはカラムのデータ型やデータ長も収められています。 これとは別に、CREATE TABLEで作成されたテーブルの一覧が収められている管理テーブルもあります。 こっちもテーブル名を忘れてしまいましたw ちょっとググってみたら USER_TABLES DBA_TABLES がテーブル一覧。 USER_TAB_COLUMNS DBA_TAB_COLUMNS がカラム一覧。 DESCを使用してどんな項目があるか調べてみてください。 USER_は今ログインしているユーザーが所有しているもの、DBA_はデータベース所有のもの、となります。 ということで、 select table_name from dba_tab_columns where table_name='A' 同一テーブルが複数出てくるようならGROUP BYを使用してください。 (2)に関しては上記のことができてから考えましょう。 たしかWHEREにINを使用すると'A','B','D','G'を含むレコードを抽出するという書き方ができたはずです。固定値だけではなくSELECTも指定できたはず。 詳しくはリファレンスマニュアルをみてください。

関連するQ&A

  • テーブル名をカラムとして取得する方法

    テーブル名をカラムとして取得する方法はありますでしょうか? オラクル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のテーブルだよ」を後で挿入したいと思っています。

  • 重複せずに取り出すはSQLでできますか?

    アクセス2010です。 テーブルA AB AC DB GR から データの先頭文字だけを重複せずに取り出すには? テーブルB A D G 現在 rs.MoveNextでループを使い1個ずつ同じのがあるか、ないかで取り出していますが、SQL文1行だけで可能でしょうか?

  • SQL*LoaderでCSVから指定した列のみインポートしたい。

    SQL*Loaderを用いてOracleのテーブルにデータを格納 しようと思っています。 格納するデータはカンマ区切りのCSVファイルです。 入力CSVファイルは他テーブル用のファイルなので、 ローダーで落とし込むテーブルとは列数が異なります。 ですので、「CSVの5列目の値をテーブルのAA_NOというフィールドに 格納する。ということが可能なのでしょうか?」 CSVファイルのある行が a,b,c,d,e,f というデータの場合、テーブルには a,e,f とインポートしたいのです。 よろしくお願いします。

  • 行列の変換

    SQL SERVER 2005 Aのテーブルから A1というビューを作成しました。 そのビューの内容というのは AのテーブルのTOP4を 列に変換したいというものです。 例) Aテーブル (列名 AA AB AC) AA1 AB1 AC1 AA2 AB2 AC2 AA3 AB3 AC3 AAビュー AA_1 AB_1 AC_1 AA_2 AB_2 AC_2 AA_3 AB_3 AC_3 AA1 AB1 AC1 AA2 AB2 AC2 AA3 AB3 AC3 となるような、ビューのSQLがあれば、教えて頂きたく思います。 よろしくお願いします。

  • 別テーブルの検索した結果が0件のデータのレコードを削除したい

    SQL Server 2005 を使用しています。 別テーブルで検索した結果が0件の時、対応するレコードを削除したいのですが、SQLをどうかけば実現出来るかわかりません。 具体的には、テーブル Aとテーブル B があって、テーブル Aのキーが AA,AB,ACとします。 この時、テーブル Bにも AA,AB,ACという列があるとします。 この時に、テーブルBをAA,AB,ACでGROUP BYしてCOUNTをとった時にレコード数が0のキーのレコードを、テーブルAから削除したいのですが、この時SQLを一つで書きたいのです。 テーブル Aが明細、テーブル Bが名簿みたいな形で、名簿に存在しないレコードを削除するような感じです。 どういうSQLを書けばいいか少し悩んでいます。 AA,AB,ACは全て integer型です。 どなたかわかりましたら教えてください。

  • SQL文で

    SQL2000serverで 異なる2つのデーターベースの中にある 別のテーブルの情報を SQL文を使って、抽出する事は出来るのでしょうか? たとえば下記のように「DB-A」「DB-B」と言った 二つのDBの中のそれぞれのテーブルのIDフィールドで リレーションを取ってDB-AのTablA1のFldAの 値(AA)からDB-BのTablB1のFldBの値(あ)を 抽出することはSQL文で可能なのでしょうか? DB-A DB-B TablA1 TableB1 ID FldA ID FldB 1 AA 1 あ 2 BB       2 い 3 CC 3 う 4 DD 4 え

  • SQL 条件付きDELETE文について

    SQLを見よう見まねでいじることになりました。。 AテーブルからBテーブルの以下の条件が当てはまるデータを削除する SQLを作りたいと考えています。  (1)Bテーブルの『DAT_FLG』が1  (2)A.テーブル『KNR_NO』 と Bテーブル『KNR_NO』が同じ  (3)Aテーブル『STR_YMD』 と Bテーブル『STR_YMD』が同じ  (4)Aテーブル『END_YMD』 と Bテーブル『END_YMD』が同じ 以下のようなSQLを考えましたがエラーとなってしまいました。 DELETE FROM A JOIN B ON A.KNR_NO = B.KNR_NO and A.STR_YMD = B.STR_YMD and A.END_YMD = B.END_YMD B.DAT_FLG = '1' DBはoracleを使っています。 どなたか教えてください。

  • SQL 繰り返し項目を表示

    以下の条件 カラム「C1」が主キーのテーブルがAとB↓ テーブルA C1| --- AA| テーブルB C1|C2| -----| AA|11| AA|22| AA|33| とあった場合に、抽出結果を C1|C2 | ---------| AA|112233| にするためにはどのようなSQLを組めばいいのでしょうか?

    • ベストアンサー
    • MySQL
  • SQL 同テーブル、同フィールドの文字列連結

    以下の様にSQLで実現したいと思っております。 なお、DBはOracle10Gを利用しております。 親と子テーブルがあり以下の構成となっております。 ■親テーブル  ID,カラムA  1 ,AA  2 ,BB  3 ,CC ■子テーブル  ID,枝番,カラムB  1 ,1 ,あああ  1 ,2 ,いいい  2 ,1 ,ううう  2 ,2 ,えええ  2 ,3 ,おおお  3 ,2 ,かかか ※IDカラムは親テーブルと子テーブルは1:1です  子テーブルの枝番カラムはIDに対してN件です。 やりたい事としては、上記の2テーブルより、以下の結果を出力したいです。  ID,カラムA,カラムB  1 ,AA ,あああ いいい  2 ,BB ,ううう えええ おおお  3 ,CC ,かかか 親テーブルを元にして、 親テーブルに紐づく子テーブルのカラムBを連結して出力 するSQLをご教授いただけますでしょうか

  • お世話になってます。

    お世話になってます。 SQL初心者です。 現在、ORACLEでSQLを作成しているのですが、「ORA-00920」と「ORA-02063」が 発生し困っています。 「ORA-02063」の原因は調べてみると「ORA-00920」が原因の可能性があるみたいです。 「ORA-00920」のメッセージには「関係演算子が無効です。」とありますが、 調べてみてもよくわかりません。 実行するSQLは以下のような感じです。 ■SQL文 with テーブルA as( SELECT文   取得カラムA, 取得カラムB, 取得カラムC ), テーブルB as(   取得カラムA, 取得カラムB, 取得カラムC ) SELECT * FROM テーブルA A_TABLE, テーブルB B_TABLE WHERE A_TABLE.取得カラムA = B_TABLE.取得カラムA (+) AND A_TABLE.取得カラムB = B_TABLE.取得カラムB (+) AND A_TABLE.取得カラムC = B_TABLE.取得カラムC (+) ***ココマデ*** ビューの作成はうまくいっているのですが、 テーブルAとテーブルBを使用したSQL文でエラーになっているようです。