• ベストアンサー

ループの仕方

yoko3333の回答

  • yoko3333
  • ベストアンサー率35% (47/134)
回答No.3

たびたびすみません。 ちょっと思いつきました。 ------------------------------------------------------------------- set echo off set sqlprompt "--[SPOOLING...]> " set heading off set feed off set timing off set pages 0 spool temp.sql SELECT 'SELECT 1a,1b,1c FROM TABLE1 WHERE 1a ='||count(TblB.TABLEのキー)||';' ||chr(10)|| 'SELECT 2a,2b,2c FROM TABLE2 WHERE 2a='||count(TblB.TABLEのキー)||';' FROM TABLE TblA, TABLE TblB WHERE TblA.TABLEのキー>=TblB.TABLEのキー GROUP BY TblA.TABLEのキー; spool off set heading on set feed on set timing on set pages 1000 SET SQLPROMPT "SQL> " set echo on @temp ------------------------------------------------------------------- spoolファイルを使ってみました。 一度、「temp.sql」というファイルにSQL文を書き出して、「@temp」でそのSQL文を実行しています。 SQL文を見て見たければ、「temp.sql」を自分でわかりやすいファイル名に変更して spool c:\test.sql (省略) @c:\test.sql とやってみてください。 連番を取得するのために、SQL文が複雑になってます。 単純に SELECT 'SELECT 1a,1b,1c FROM TABLE1 WHERE 1a ='||rownum||';' ||chr(10)|| 'SELECT 2a,2b,2c FROM TABLE2 WHERE 2a='||rownum||';' FROM TABLE; でもOKなような気もしますが・・・rownumがどんな場合でもきちんと1から連番になってくれる のかはっきりしなかったので、今回は見送りました。 不明な点がありましたら書きこんでください。 (またお返事が遅くなるかもしれませんが・・・。)

moritaka6280
質問者

お礼

いろいろ検討してくださって、ありがとうございました。 もう少し、自分でも調べてみたいとおもいます。

関連するQ&A

  • サブクエリを利用したSQL文から複数の抽出条件

    例えば、以下のようなサブクエリを利用したSQL文があります。 SELECT table_a.* FROM table_a LEFT JOIN (SELECT table_b.* FROM table_b LEFT JOIN table_c ON (table_b.id = table_c.bid) WHERE table_b.type='1') AS tbl ON (table_a.id = tbl.aid) このSQL文にWHERE句で条件を指定したいのですが、サブクエリで指定しているtblテーブルのvalueフィールドが「1」と「20」のものを抽出したいと思います。 WHERE (tbl.value='1' AND tbl.value='20') としても結果が帰って来ません。 これは、WHEREする条件の数だけ、サブクエリでテーブルを作って条件を指定するのでしょうか? 効率が悪そうなので、他の方法があるのではと思いご質問させて頂きました。 お分かりになる方がいれば、よろしくお願いします。

  • 複数テーブルでの件数検索について

    Oracle上の2つのテーブルからの条件でマッチする件数をSQLで作成しています。 内容としては、テーブルAの区分=1 かつ テーブルBの種別がスペースの件数です。 テーブルAの該当するデータは10件中3件、テーブルBの該当するデータは50件中15件で、本来両方がマッチするのは2件です。 SELECT COUNT(*) FROM テーブルA,テーブルB WHERE テーブルA.区分 = '1' AND テーブルB.種別 = ' ' ; 上記のSQL文で件数をカウントしたのですが、どうも結果では30件とカウントされてしまいます。 なんとか2件として結果を出したく、参考資料を調べているところなのですが、今のところ参考になる文献が見つからず悩んでます。もし簡単にカウントできるSQLがあったり、分かる方がいれば手助けして頂きたいと思い、今回投稿しますのでご教授賜りたく思います。よろしくお願いします。

  • まったく別のテーブルの結果MYSQL

    table_1 id name age table_2 id book title city day SELECT * FROM table_1 WHERE id=? SELECT book,title FROM table_2 WHERE city=? このようにまったく別のテーブル カラム数も違う WHEREの?も違う これを一つのSQL文にまとめたいのですが。 UNIONなどを使ってもうまくいきませんでした。 ご教授お願いいたします。

    • ベストアンサー
    • MySQL
  • WHERE文の中で除算

    SQLのWHERE文の中で計算をしているのですが、「除数が0です」とのエラーがでてしまいます。 同じ計算をSELECT文の中にいれると、エラーにならず、計算結果がでるのですが、どうしてでしょうか? SELECT DATA, (A + B - C) / (A + B) * 100 FROM table ↑この時は計算結果がでます。 SELECT DATA FROM table WHERE (A + B - C) / (A + B) * 100 <= 50.0 ↑「除数が0です」といわれてしまいます。

  • 実行計画HASH JOIN RIGHT OUTER

    以下のようなSQLがあるとします。 ------------------------ SELECT * from (select * from TABLE-A where 条件色々) AA, TABLE-B BB where BB.x(+) = AA.x ------------------------ TABLE-Aの件数は非常に多く(例100万)、条件は複雑です。 TABLE-Bの件数は少ないです(例30件) この時、実行計画が HASH JOIN RIGHT OUTER TABLE ACCESS FULL TABLE-B のように出ましたが、どのように解釈すれば良いのでしょう? TABLE-Bは件数が少ないのでACCESS FULLでも問題ないでしょうか? HASH JOIN RIGHT OUTER のコストが高くなってて気になってます。 たとえば、この場合のより適切な実行計画ってありますか?

  • このSQL文の意味を教えてください。

    SQL勉強中の者です。このSQL文の意味を教えてください。 SELECT A.* FROM table AS A, table AS B WHERE A.id *= B.id AND A.flag = 1 tableにAとBという別名をつけて、Aの全ての項目を抽出しているというところまでは分かりました。 分からないのは「WHERE A.id *= B.id」の部分です。ただの「=」なら分かりますが「*=」って何ですか? あと、AとBのテーブルが同じなのですが、同じテーブルを2つ並べている意味がよく分かりません。 よろしくお願いします。

  • SELECT文の二段重ね

    次のSQL文を実行します。 create table1 (id, english) insert table1 (1,"foo") insert table1 (2,"bar") create table2 (id, japanese) insert table2 (1, "ふー") insert table2 (2, "ばー") SQL文法としては誤ってますが、成功したとします。 いま、select id from table1 where english = 'foo'; で1が得られます。 いま、select japanese from table2 where id = 1; で"ふー"が得られます。 これを一つのSQLite3のselect文で実現できないでしょうか。 select japanese from table2 where id = (select id from table1 where english = 'foo'); で良いですか? カテゴリ選択にSQLiteが無いのは、人気が無いからですかね。

  • MySQL4で2つのテーブルを結び付ける方法

    MySQL4で2つのテーブルを結び付ける方法は 以下のどちらが正しいのでしょうか? (while文中でSQLを発行せずに、をSQL文1発で出す場合) um_ukがどちらのテーブルにも共通なモノとして、 ■1 SELECT * FROM a_table A,b_table B WHERE A.um_uk = $um_uk AND B.um_uk=$um_uk; ■2 SELECT * FROM a_table.A,b_table.B WHERE A.um_uk = $um_uk AND B.um_uk=$um_uk; また、どちらも間違っている場合正解をご教授下さい。

    • ベストアンサー
    • MySQL
  • 同一レコードを複数取り出したい

    以下のようなテーブルがあったとます。 <AA table> A B ------ 01 2 02 3 03 4 A = '01'のレコードを取り出す場合には、 select * from AA where A = '01'; A B ------ 01 2 で取れますが、このときBの値を判断して、以下のようにBの数だけ同一レコードを取り出したいと思います (where A = '01'ならば) A B ------ 01 2 01 2 (where A = '03'ならば) A B ------ 03 3 03 3 03 3 03 3 このように、同一レコードを条件によって複数取り出す処理をSQLで記述することはできるのでしょうか?

  • SQL得意な方

    仕事で困っています、 なにとぞお力添えを。 テーブル1から、TOP50 でaとbを表示させたいのです。 で、その際の条件として、 開始するレコードも指定したいのです。 下記SQLの[○]の部分に50が入っていたら、 51~100件を表示する、と、いうような。 SELECT TOP 50 a,b FROM テーブル1 WHERE c='1' AND a >= '' AND a NOT IN ( SELECT TOP 〇 a FROM テーブル1) ORDER BY a で、順調だったのですが、WHERE条件が なんだか怪しいらしく、 a >= ''の時だけはきちんと動くのですが、 ANDでc='1'をつけた所、普通に全件表示されてしまいます。 [ちゃんと51件目から100件目を表示するSQL] SELECT TOP 50 a,b FROM テーブル1 WHERE a >= '' AND a NOT IN ( SELECT TOP 〇 a FROM テーブル1) ORDER BY a [何故か全件表示になるSQL] SELECT TOP 50 a,b FROM テーブル1 WHERE c='1' AND a >= '' AND a NOT IN ( SELECT TOP 〇 a FROM テーブル1) ORDER BY a ※[何故かNOT IN (~)の部分がまったく働いていない] どうしてなのでしょう?。 解りにくい質問で大変申し訳ないのですが どなたかご教授いただけないでしょうか。