• ベストアンサー
  • すぐに回答を!

oracle SQL

以下のようなことを実現する方法についてお教え頂きたいです。 ■テーブル [XXXマスタ] ID char(8) 上記のテーブルにはIDという項目があるのですが、このテーブルで 使用していないIDのみをSQLで抽出できないかと考えております。 ただし、なるべくならワークテーブルのようなものは利用せずに 行いたいと思っております。 いい方法があれば教えていただきたいです。

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数114
  • ありがとう数0

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

  • ベストアンサー
  • 回答No.1

こんにちわ。 > 上記のテーブルにはIDという項目があるのですが、このテーブルで > 使用していないIDのみをSQLで抽出できないかと考えております。 ID にどのような書式でデータが格納されているか記載されていないので '00000001' から連番で入っていると仮定して 00001000までの間で使用 していない番号を求めるなら、こんな感じです。 Select to_char(level, 'FM00000000') as id from dual connect by level <= 1000 minus select id from XXXマスタ;

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • SQLの結合条件について

    SQLの結合条件について ・table_A ID | ATAI 01 | AAA 01 | XXX 02 | ABC 03 | DEF table_B ID | ATAI 01 | 不要 02 | 必要 03 | 必要 04 | 不要 上記のようなテーブルAとBがあるとします。 やりたいこと 1.テーブルAに存在するIDをBのIDから抽出 2.テーブルAの「ATAI」の値が’AAA’のIDは抽出対象から外す。 ※テーブルAの01IDに’AAA’と’XXX’がありますが、Bの抽出対象から外したい。 2.がうまくいきません。 select B.ID from table_A A,table_B B where A.ID = B.ID 上記のSQLに2.の条件を足して、結果を02と03にしたいです。 ※CASEは使わずにお願いします。

  • oracle10g(10.2.0.1.0)のsql*plusでの出力について

    質問させていただきます。 sql*plusを使用して以下のような簡単なテーブルを作成しました。  create table XXX_TBL ( NUM NUMBER(3), NAME CHAR(5)); データをINSERT後、SELECT * FROM XXX_TBLで内容を表示したところ、 以下のように表示されました。  NUM              NAME  ---------- ---------------                1  test NAMEはCHAR(5)で作成したにもかかわらず、---の 数が15もあります。 oracle9iでは、CHAR(5)の場合の---の数は5でした。 上記例では、2項目しかないためsql*plusで出力しても 気になりませんが、項目数を増やし、またカラムサイズを 大きくした場合に、見づらくなってしまいます。 何らかのパラメータの設定を変更すればよいのかと思い、 いろいろと調べて見ましたがわかりませんでした。 ご教授願います。

  • これを抽出するSQLを教えてください

    どういうSQLを書けばこれが実現出来るのか分からないので教えて下さい。 テーブル名 f_table というテーブルがあります。 このテーブルには、f_id,u_id,day(日付)という三つの列があり、下記のようにデータが入っているとします。 f_id  u_id    day   1    1   2007/3/8 2    2   2008/1/2 3    2   2008/1/10 4    1   2007/2/12 このf_tableから、各u_idで一番日付の新しいf_idを抽出する(この表の場合f_idの1と3が抽出される)にはどういうSQLで出来るのでしょうか? ※実際の表ではu_idに入っている数字の種類は1と2だけではなく、もっと沢山あります。 ご回答よろしくお願いします。

  • SQLの記述について

    SQLの記述で Aトランザクションテーブル(以後Aテーブル)とBマスタテーブル(以後Bマスタ)が有り, AテーブルにBマスタの内容を反映させ或る条件のデータだけ抽出は可能でしょうか? 例 Aテーブルの内容をBマスタを検索しデータがAの場合のみ抽出 Aテーブル        Bマスタ キー  データ     キー  データ      001 0001    001 A 001 0002    002 B 002 0003    003 A 001 0004    004 C 002 0021 003 0005 004 0001 実行結果 キー  データ 001 0001 001 0002 001 0004 003 0005 上記の結果のように,Aテーブルの内容からBテーブルを見て条件を判断しての抽出は可能でしょうか?

  • oracle(SQL)のHINT指定について

    性能問題について対応しています。 約2000万件のマスタと付随する各テーブルを結合して、検索条件に一致するデータを抽出するSQLを開発していますが、これらのパターン(曖昧検索:前方一致)において、前述の2000万件のマスタが駆動表となり、且つフルスキャンが走るものがあり、改善策を検討しています。 つきましては、HINT指定で駆動表を強制的に各テーブルに変更する方法(SQLのHINT指定内容)についてお教え願います。  →曖昧検索条件にもっとも絞られる対象のテーブルを駆動表とし、マスタテーブルはその駆動表とプライマリーキーで結合した形でアクセス(フルスキャンを避ける)ような実行計画となるSQLに改善をしようとしています。 以上です。 

  • Oracle SQL DELETE文のレスポンス

    いつもお世話になっております。 この度は、手前のSQL文において DELETE文のレスポンスが上がらずに難儀しています。 現在DELETE処理はバッチにて行っています。 最初にSELECTにて抽出を行ったものをバックアップにとり、 次は同様の条件でDELETE文で処理しています。 この際に、SELECTでは1秒程度で済んだ処理が、 DELETE文ではレスポンスが返ってこないという状況です。 何がまずいのか、どう工夫すればいいのか 色々変えてみましたがレスポンスは改善されません。 SQLと条件は以下です。 【SQL文】 SELECT 複数の項目 FROM TABLEA A WHERE NOT Exists(SELECT 'X' FROM TABLEB B WHERE A.ITEMNO = B.ITEMNO) AND NOT Exists(SELECT 'X' FROM TABLEC C WHERE A.ITEMNO = C.ITEMNO AND to_char(LAST_DAY(ADD_MONTHS(SYSDATE,-4)),'YYYYMMDD') < C.REPYMD) AND NOT Exists (SELECT 'X' FROM TABLEA2 A2 WHERE A.ITEMNO = A2.ITEMNO AND to_char(LAST_DAY(ADD_MONTHS(SYSDATE,-4)),'YYYYMMDD') < to_char(A2.CREATEDATE,'YYYYMMDD')) AND NOT Exists(SELECT 'X' FROM TABLEC C WHERE A.ITEMNO != C.ITEMNO AND to_char(LAST_DAY(ADD_MONTHS(SYSDATE,-4)),'YYYYMMDD') < to_char(A.CREATEDATE,'YYYYMMDD')) 上記のSELECT文の後に処理されるDELETE文は 「SELECT 複数の項目 FROM TABLEA A」 ⇒ DELETE FROM TABLEA A としたもので、 条件は全てSELECT文と同様のものを使用しています。 ◆条件を言葉で明記すると以下のようになります。 1.Bテーブルに存在するものは削除対象外とする 2.AテーブルのアイテムIDとCテーブルのアイテムIDは一致する。   AテーブルのCREATEDATEとCテーブルのREPYMDのいずれかが3ヶ月以内のアイテムは   削除対象外とする 3.AテーブルもしくはCテーブルにしか存在しない場合は、各日付が3ヶ月以内のアイテムは   削除対象外とする 以上のようになっています。 どなたかアドバイスをいただければ幸いです。 宜しくお願い致します。

  • SQLについて

    以下のSQLを作成したいのすが 実現方法が判りません お助けください。 環境:SQL SERVER2008 実現したいこと 明細テーブルの挨拶項目にマスターA・Bからメッセージを取得したい。 基本はAマスターのメッセージを取得 コードを1つのグループとして扱いマスタBに合致する場合 マスタAでは無くてマスタBのメッセージを取得したいです。 よろしくお願いいたします。 具体的に取得したい結果は ☆望む結果になります。 コードは必要ないのですが、 判別の為一緒に表示いたしました。 マスタA 挨拶 メッセージ 000601 おはよう 000602 こんにちは 000603 こんばんは 000604 お休みなさい 000605 就寝中 マスタB(最大3つまでの組合せです) 挨拶1 挨拶2 挨拶3 メッセージ 000601 000602 000603 おはようございます。 000602 000603 こんにちは・こんばんは 明細テーブル コード 挨拶 000153 000601 000153 000602 000153 000603 000154 000602 000154 000603 000155 000604 000156 000605 ☆望む結果 コード メッセージ 000153 おはようございます。 000154 こんにちは・こんばんは 000155 お休みなさい 000156 就寝中

  • SQLのSELECT結果を縦から横に抽出する方法

    SQLのSELECT文について DB:MYSQL5.0 テーブルAとテーブルBを結合して テーブルAの項目と一緒(横)にテーブルBを抽出したいです。 どのようにすると実現できるのでしょうか? よろしくお願いします。 Aテーブル ID ITEM1 1 11111 2 22222 3 33333 4 44444 Bテーブル ITEM1 CNT KBN 11111 1    1 11111 2    2 11111 3    3 22222 4    2 22222 5    3 33333 6    3 出力結果 ITEM1 KBN1 KBN2 KBN3 11111  1   2   3 22222  0   4   5 33333  0   0   6 44444  0   0   0

  • sqlのJoinでこんなこと出来ますか、

    sqlのJoinでこんなこと出来ますか、 当方初心者につき宜しく御願いします。 テーブルAにはIDがありIDはユニークです。テーブルBにはIDと項目がありIDは複数件存在します。項目には「あ」又は「い」、「う」、「え」、「を」が入っています。idに対して「あ」だけの時もあれば、「い」、と「う」が存在する時もあります。1件または複数件存在します。 条件に「あ」を抽出するようにして、「あ」がないときは存在するがテーブルBには存在するという結果を作りたいのです。 ID=1、あ ID=2、NULL という結果を作りたいのです。テーブルの双方に存在して、かつ「あ」であれば「あ」以外はNULLのレコードを作りたいのです。 説明が悪くて申し訳ありませんが宜しく御願い致します。

    • ベストアンサー
    • MySQL
  • 絞込みする時のSQLの書き方

    お世話になります。 絞込みする時のSQLの書き方について教えてください。 具体的には テーブル名tbl01,フィールド名f01,f02とした場合 1.f01もしくはf02にAという文字を含むレコードを抽出。 SQL = "select * from tbl01 where f01 like '%A%' or f02 like '%A%'" 2.続いて、1で抽出したデータからf01もしくはf02にBという文字を含むレコードを抽出するSQL文 SQL = ????? あくまでも、1と2を満たす条件を1つのSQL文で表す方法です。一旦、1の結果をワークテーブルに落とし、そこから2だけのSQL文を実行するわけではありません。