- 締切済み
再起SQL が無限ループします。
再起SQL が無限ループします。 このようなテーブルのデータがあったときに、 1番上の1レコードを選択して、 中分類か小分類が同じデータを取得したいんです。 大分類 中分類 小分類 -------------------- 4444 |aaaa |0001 4444 |bbbb |0001 4444 |cccc |0002 4444 |dddd |0002 4444 |aaaa |0003 6666 |ffff |0003 ↓このように取得したい 大分類 中分類 小分類 -------------------- 4444 |aaaa |0001 4444 |bbbb |0001 4444 |aaaa |0003 6666 |ffff |0003 再帰SQLのwithを使ってみたのですが、 無限ループしてしまいます。 with rec (大分類,中分類,小分類) as (select * from 商品テーブル where rowid=1 union all select * from 商品テーブル h, rec r where(h.中分類=r.中分類 or h.小分類=r.小分類) and not (h.中分類=r.中分類 and h.小分類=r.小分類) ) select * from rec; union all以下のselect条件をxorで取ればいいと 思うのですが、それができていないようです。 withでやる必要はないので、他の方法でも いいのですが、S/Pは使えない事情があります。 アドバイスをお願いします。
- suraimuman
- お礼率0% (0/2)
- Oracle
- 回答数2
- ありがとう数11
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- muyoshid
- ベストアンサー率72% (230/318)
こんにちわ。 select distinct 大分類,中分類,小分類 from 商品テーブル じゃだめでしょうか?
- o123459876
- ベストアンサー率59% (19/32)
with a as ( select dai,tyu,syo ,case when tyu = first_value(tyu)over(partition by dai) or syo = first_value(syo)over(partition by dai) then 1 else 0 end as b from syohin ) select dai,tyu,syo from a where b = 1
関連するQ&A
- SQL文の書き方
お世話になっております。 現在、SQLServer2000(SP4)を使用しています。 次の結果を求めるSQL文を作りたいのですが、中々上手く行きません。 良い方法を教えて下さい。 あるテーブル(tableA)にレコードが以下のようにあるとします。 【基本コード】【大分類】【中分類】 1 1 3 1 1 4 1 2 1 2 1 99 2 18 1 3 3 2 やりたい事は、【基本コード】毎に、【大分類】【中分類】の最小値を取得したいので、下記の結果を得たいのですが、 期待する結果↓ 【基本コード】【大分類】【中分類】 1 1 3 2 1 99 3 3 2 現在考えているSQL文では、下記のようになってしまいます。 実際の結果↓ 【基本コード】【大分類】【中分類】 1 1 3 2 1 3 3 3 3 現在考えているSQL文↓ SELECT 基本コード, MIN(大分類) AS 大分類, (SELECT MIN(中分類) FROM tableA WHERE 大分類 = (SELECT MIN(大分類) FROM tableA) GROUP BY 大分類) AS 中分類 FROM tableA GROUP BY 基本コード 中分類を求める場合の、大分類の指定の仕方が悪いのはわかるのですが、どう直したら良いのか分からず困っています。 宜しくお願いします。
- ベストアンサー
- SQL Server
- SQLについて何ですが
一つのSQLで下記の様な検索が出来ないかと考えています、 大分類に分けて大分類の中で売れている商品のTOP10を表示し、 現在表示されている商品を抜いた売れている商品TOP100もに表示できるようとしています、 分類のテーブル・商品がどの分類に当てはまるのか関連づけし注文数も保持しているテーブル・商品の売れ行きを保持しているテーブルがあり 分類テーブルには15個(将来的に増える可能性ある)の分類ワードが入っていて、分類別に売れているTOP10を表示し重複部分もあるので最大150個の商品が表示されるようになっています、 全商品の売れ行きTop「表示されている商品プラス100件」を割り出しその中から表示商品はずしてみようと思いこの様なSQL文と作ったのですが今一うまくいっていないような気がします、 「select 商品名 注文数 from 商品テーブル where 商品名 not in( select 商品名 from 分類商品テーブル where 分類 in ( select 分類 from 分類テーブル ) order by 注文数 desc limit 10) order by 注文数 desc limit 表示商品数+100」 どうもうまく表示できていない様な気がしているのですが、 このSQLどうなのでしょうか? ほかにもっといいSQL文があれば教えてください。 」
- 締切済み
- PostgreSQL
- WHILEで取り出しループ中にさらにSQL文を入れたいです。
こんばんは。 いつもお世話になっております。 またはまってしまったみたいで、どうにもわからなく なってしまいました。 どうかご指導よろしくお願いいたします。 使用環境はPHP5+Apche+MySQL4.0です。 2つのテーブルから【一覧リスト】というページを作って mysq_fetch_array関数で、行をループで呼び出しました。 ここまでは出来たのですが、取り出したキー情報を もとに、別テーブルの情報(文字列)を取り出したい のです。 以下、試してみたコードです。 //SQL発行 $rs = mysql_query("select * from uriage", $conn); //1件ずつ取り出すループ while( $rec = mysql_fetch_array( $rs, MYSQL_ASSOC)){ echo "<tr>"; echo "<td>".$rec['oder_no']."</td>"; $sql = "(select*from syouhin where syouhin_id = '".$rec["syouhin_id"]."')"; $res = mysql_query($sql); $rows = mysql_fetch_array($res); echo $rows["syouhin_name"]; echo "<td>".$rec['siiresaki']."</td>"; echo "<td>".$rec['tanka']."</td>"; echo "</tr>"; } Parse error: syntax error, unexpected T_ECHO というエラーが返ってきています。 エラーの行数はecho $rows["syouhin_name"]; の部分です。 何が悪いのかすら判らなくて…。 どうか、ご指導よろしくお願いいたします。
- ベストアンサー
- PHP
- SQL文でエラーが出ます。
MySQLの事で質問です。 テーブル1~4を結合してフィールド「comment」を検索 する時にフィールド「postDate」の降順でソートしたい のですがエラーが出ました。 「SQLコマンド」 select text from table1 union all select comment from table2 union all select comment from table3 union all select comment from table4 where match(commentIndex) against("検索ワード" in boolean mode) order by postDate desc; 試しに union all select comment from table2 union all select comment from table3 union all select comment from table4 の部分を削除して実行してみた所、成功しました。 後、order by postDate desc;のみ削除した場合でも成功しました。 エラーの内容はこれです↓↓ Unknown column 'postDate' in 'order clause' フィールド「postDate」は存在します。 (varchar型何ですが、それがいけないと思い date型やdatetime型と変えてみましたがダメでした) 何とかソートしたいのですがどうすればいいのでしょうか?
- ベストアンサー
- MySQL
- access で 方法を教えてください。
access で 方法を教えてください。 テーブルは セミコロン区切りで、区切られて表示されています (テーブル例) 1 aaaa;bbbb;cccc;dddd;eeee;ffff 2000byte 2 aaaa 300byte 3 bbbb;cccc;ffff 3000byte 4 ffff;dddd 120byte このセミコロン区切りの区切られたデータの 「件数」と「バイト」を表で表示させる方法を教えて欲しいのです。 上記テーブル例を使用しての(抽出例) 抽出条件 ↓ aaaa 2件 2500byte bbbb 2件 5000byte cccc 2件 5000byte dddd 2件 2120byte eeee 1件 2000byte ffff 3件 5120byte 宜しくお願いします。
- ベストアンサー
- オフィス系ソフト
- SQL データ集計
はじめまして、現在Postgres8.3を利用して開発を行っています。 以下のテーブルがあります。 No グループ ------------------------------------- 1 AAAA 2 BBBB 3 CCCC ■テーブルB ID 項目CD 評価結果 グループ 登録日 ------------------------------------- A 1-1-1 ○ AAAA 2000-10-10 A 1-1-1 ○ AAAA 2007-12-10 B 1-1-1 × AAAA 2006-12-16 C 1-1-1 ○ AAAA 2009-04-16 A 1-2-1 ○ AAAA 2004-10-16 A 1-2-1 ○ AAAA 2007-01-16 B 1-2-1 ○ AAAA 2003-12-14 C 1-2-1 〇 AAAA 2007-12-15 評価結果は、○と×があり、項目CDごとに集計を行い、項目CDが同じ場合は、○がいつくあっても1とみなして計算するということをおこないたいです。 登録日を指定して、抽出したいのですが、 登録日を 条件に含めると、全部計算されてしまいます。 select count(評価結果) from (select ID,項目CD,評価結果 from テーブルB group by ID,項目CD,評価結果 order by ID,項目CD,評価結果) as rtable where rtable.評価結果 = '○' rtable.登録日 between '2000-01-01' and '2009-01-01' ■理想の結果 グループ 合計 -------------- AAAA 5 ■現在の結果 グループ 合計 -------------- AAAA 7 どうしても出来なくって、困っています。 よろしくお願いいたします!!
- 締切済み
- PostgreSQL
- SELECT分での結果の取り出し方
以下の様なテーブルから SELECT分で条件をWHERE CODE = '0001' の様に指定して 求まった結果を1つの文字列にしたいのですが 良い方法がありましたら、教えて下さい。 SELECT * from testtbl; CODE NAME ------------------------------- 0001 AAAA 0001 BBBB 0002 CCCC 0003 DDDD この例だと、 SELECT NAME FROM testtbl WHERE CODE = '0001'の様な形で NAMEの部分の結果として,'AAAA,BBBB'の文字列を取得したいです。 ファンクションとかで実現できるでしょうか?
- 締切済み
- Oracle
- 抽出結果にレコードNoを付与することは可能?
mysql5.0.18です よろしくお願いします 抽出結果にレコードNoを付与したいのです 実際には順位(同点は同順)としたいのですが 複雑になりそうなので 単純に、抽出結果に先頭から連番が振れればOKです 例えば テーブル名:test_table カラム:keys,data,value keys data value a001 aaaa 80 a002 aaaa 90 b001 bbbb 100 b002 bbbb 51 上記のテーブル内容から 抽出します Select keys,data,value From test_table Where keys Like '%002' Order By value Desc, data Asc 抽出結果 keys data value a002 aaaa 90 b002 bbbb 51 上記抽出結果を keys data value rec_no a002 aaaa 90 1 b002 bbbb 51 2 のように 抽出結果に先頭から連番を振りたいのです このようなことは実現できるのでしょうか? temporaryは使用したくありません (Dropのタイミングがよく分からないので・・・) viewはOKです 理想は・・・ Select keys,data,value,rec_no(auto increment) From test_table Where keys Like '%002' Order By value Desc, data Asc のような事ができないのかな?と妄想していますTT よろしくお願いします
- ベストアンサー
- MySQL
- Access Union について
下記2テーブルがあります。 テーブル1 品番 1月合計 AAAA 1111 BBBB 2222 CCCC 1122 EEEE 3211 テーブル2 品番 2月合計 AAAA 1211 BBBB 3222 CCCC 1522 DDDD 2223 UNIONのSQL文で下記のような結果を得たいです。 品番 1月合計 2月合計 AAAA 1111 1211 BBBB 2222 3222 CCCC 1122 1522 DDDD 2223 EEEE 3211 SQL文をどのように書いたらいいですか。ご教授,お願い致します。
- 締切済み
- オフィス系ソフト
補足
o123459876さん、ありがとうございます! 文章の説明が悪かったのですが、 1番上の1レコードを選択して、 中分類か小分類が同じデータを取得し、 さらに取得したレコードと同じ中分類か小分類の レコード取得し…と、中分類か小分類が一致する データがなくなるまで繰り返したいのです。 例のだと、 6666 |ffff |0003 のデータも取得したいのです。 何か方法ありますでしょうか。