複数フィールドの総当たり組み合わせをデータベースで生成する方法

このQ&Aのポイント
  • データベースソフト上で、複数のフィールドについて総当たりの組み合わせを元に最終的なデータを生成する方法について教えてください。
  • SQLを使用せずに総当たりを実現する方法はありますか?具体的には、ACCESSやlibrabaseといったデータベースソフトを使用し、任意の体積になる組み合わせを精査したいです。
  • フィールドを総当たりする方法が分からないので、解説をお願いします。
回答を見る
  • ベストアンサー

複数フィールドの 総当たりの、組み合わせを、得たい

お世話になります。 データベースソフト上の、話し ですが、 複数ある、フィールドの 各データに、ついて 総当たりの、組み合わせを 元に 演算に、より 最終的な、データを 生成し データベースと、して 扱いたい と、思います。 ですが 総当たり、させる 方法が、解りません。 検索では SQLを、扱う 必要が、ある とか SQL等 言語を、使用せず 出来る、方法は あるで、しょうか? もし、無いなら やり方の、解説を 賜りたく、思います。 どうぞ、ご指南 お願い、致します。 具体的には 例えばの、話 楕円立体の、体積を 得て ACCESS、librabase、等の データベースソフトで、 任意体積に、なる 組み合わせを、精査する と、します。 此の、時 やはり 値群、各々 X、Y、Z、 に、ついて 各々に、フィールドを 生成した と、します。 此の、際 結果は、クエリで 4/3*X*Y*Z と、 した、上で 条件絞り込みで = N        ※(N|Nは、任意値) と、でも すれば、良い で、しょうが が、此の フィールドを、総当たりさせる 方法が、解らない の、です。 宜しく お願い、致します

  • Nouble
  • お礼率91% (1698/1856)

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

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.1

質問の意図をはきちがえていなければ、ですが。 なかなかレスがつかないようですが。 ただ単に総当りの組合せをつくりだすならば、 それほど難しいことではないと思うのですが。 一応、Accessでつくってみます。当然、他の 言語でもテキストファイルのデータをテキスト ファイルへの書き出しはできると思います。 ただし、いずれの言語を利用するにもデータを 行ったり来たりする細かな気配りがほんの少し 必要となりますが。 以下のような同じ構造同じデータを持つテーブルを 二つ用意します。つまり一方はコピーです。 それぞれ、テーブル名を 「TBL行位置」、「TBL行位置」 とします。テーブル名には何の意味もありません。 ID・・・数値型 名称・・テキスト型 ID    名称 1    名古屋 2    大阪 3    京都 4    神戸 5    福岡 この二つのテーブルを元に以下のような、 データをつくります。そのデータを収める テーブル名を「TBL組合せ」とします。 No・・・数値型 相手1・・テキスト型 相手2・・テキスト型 No   相手1  相手2 1   名古屋  大阪 2   名古屋  京都 3   名古屋  神戸 4   名古屋  福岡 5   大阪   京都 6   大阪   神戸 7   大阪   福岡 8   京都   神戸 9   京都   福岡 10   神戸   福岡 以下のコードを標準モジュールに貼り付け 実行します。 なお、DAOを使用しているので、コード表で DAOのチェックを確認してください。    Microsoft DAO xx Object Library Sub test()   Dim db As DAO.Database   Dim rs1 As DAO.Recordset   Dim rs2 As DAO.Recordset   Dim rs3 As DAO.Recordset   Dim i As Long   Dim bk As Variant   Set db = CurrentDb   Set rs1 = db.OpenRecordset("TBL行位置")   Set rs2 = db.OpenRecordset("TBL列位置")   Set rs3 = db.OpenRecordset("TBL組合せ2", dbOpenDynaset)   i = 0   'テーブルの検索位置の初期化   rs1.MoveFirst   rs2.MoveFirst   'rs2のレコード位置情報をbkに格納   bk = rs2.Bookmark   Do Until rs1.EOF     'rs2のBookmarkプロパティにbkの値を格納     'rs2のレコードの位置をbkの値で移動     rs2.Bookmark = bk     Do Until rs2.EOF       '自分自身との組合せを除いて       If rs1!位置ID <> rs2!位置ID Then         i = i + 1         rs3.AddNew         rs3!No = i         rs3!相手1 = rs1!名称         rs3!相手2 = rs2!名称         rs3.Update       End If       rs2.MoveNext     Loop     rs1.MoveNext     'rs2のBookmarkプロパティにbkの値を格納     'レコードの位置を各レコードの検索開始位置に移動     rs2.Bookmark = bk     '各レコードの検索開始位置からレコードを一つ移動     rs2.MoveNext     '移動したレコードのBookmarkの値をbkに格納     'rs1のレコードを移動させたときに組合せ重複を     '避けるために検索の出発点のrs2のレコードの     '位置を設定するために利用     If Not rs2.EOF Then       bk = rs2.Bookmark     End If   Loop   rs1.Close: Set rs1 = Nothing   rs2.Close: Set rs2 = Nothing   rs3.Close: Set rs3 = Nothing End Sub 回答の不備、疑問などがあれば補足してください。

Nouble
質問者

お礼

有難うございます。 此は VBAで、しょうか? やはり、あの 何時もの クエリーの インターフェースの、範囲 だけでは、叶わず プログラミングが、必要 なのですね アクセスの、VBAは 余り 見た事が.無い の.ですが DAO.Recordset と.言う型の Classモジュールを、使用して 実現している と、言う認識で 有っていますか?

その他の回答 (2)

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.3

No1,No2です。 テーブルを二つ用意するよりも、SQLでテーブルを メモリ上にもってもいいかもしれません。 たとえば、提示したコードで、 Dim db As DAO.Database Dim rs1 As DAO.Recordset Dim rs2 As DAO.Recordset Dim rs3 As DAO.Recordset Dim i As Long Dim bk As Variant Dim strSQL As String strSQL = "select * from TBL行位置" Set db = CurrentDb Set rs1 = db.OpenRecordset("TBL行位置") Set rs2 = db.OpenRecordset(strSQL) Set rs3 = db.OpenRecordset("TBL組合せ", dbOpenDynaset) のようにすれば、実テーブルは一つですみます。ただ、テーブルの データが膨大だとメモリを圧迫するかもしれません。データを格納する 「TBL組合せ」というテーブルは必要ですが。 補足について。 クエリはほぼ99%実データがないと何ともできません。 したがって、このようにデータを構築するならば、 VBA、VB、C言語などのプログラムが必要となります。 DAO.Recordsetというのは、DAOというミドルウエアに 属するRecordsetオブジェクトを使うのでDAOの提供する 各種の関数などを使いますよ、という宣言をしているような ものです。たとえば、C言語の #include <stdio.h> のような宣言と同じです。 したがって、 >DAO.Recordsetと.言う型のClassモジュールを、使用して >実現していると、言う認識で有っていますか? について、Classとしていいのかわかりませんが、DAOもモジュールの かたまりですから、そのような解釈でいいのでは、と思います。 実際に、総当りのプログラムがどこかに転がっているか WEBで調べてみましたが、まともなコードはありませんでした。 どの言語にしても中途半端なものでした。国内外ともにです。 なお、実際の運用はどのようにされるかわかりませんが、 総当りの組合せができるということは、各フィールドの データを比較するなり、データ同士を演算に使用して 値をだすなり、自由にできるということですから、 Accessの機能も捨てたものでもありません。その 大きなポイントが、Bookmarkというプロパティです。

Nouble
質問者

お礼

有難うございます。 実は、今 機械設計で、戯れている の、ですが どの様な、設計でも 変動させ得る パラメーターの、量は 通常、 多岐に、わたります。 其れこそ、 本気で、やれば 数ミリ毎に 厚さの、パラメーター変更を 手掛け 形状決定する 等も 考え、得ります 数式の、変形レベルでは 変化する 項の、数が 多すぎまして 結果 幾つかの、項に 関しては 定石だより、南無三、決め打ち、 と、なる 傾向に、ある 其の様に、感じます 其処で、 パラメーターと、結果の、 データベースを 作れた、場合 結果から 最も、思わしいものを 選べれば 意思決定が、楽になる 此の、様に 思った の、です さて、 そんな中 お話より とても 期待が、持てた 反面 此を 本格的に、すると データ量が、半端なさそう で、あり ワークステーションClassでも 足りるか、どうか 疑問が、もたげます ね まぁ、何はともあれ VBA の、下地は 私には、在るので テーブル等、 データベース特有の、もの達の 深層概念の、 理解を、して もう少し 戯れて、みようかな と、思います。 此からも お手を、煩わせる で、しょうが 宜しく お願い、致します。 p.s. 何処か、 データベース処理に、関して 抑えて、おくと 良い と、 お考えに、なられる ウエブページは 有りますで、しょうか?

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

すみません。NO1の回答で、 コードの中で、 Set rs3 = db.OpenRecordset("TBL組合せ2", dbOpenDynaset) となっていましたが、これを Set rs3 = db.OpenRecordset("TBL組合せ", dbOpenDynaset) としてください。テーブル名にいらない数字が末尾についていまして。 ほかには不具合はないと思いますが。

Nouble
質問者

お礼

お心遣い、 感謝します。

関連するQ&A

  • 組み合わせ生成プログラム

    はじめまして。以下のような組み合わせを生成したいと考えています。初心者なもので、どのように全く・・・です。 どのようなソフトやプログラムで出来るか途方にくれております。 よろしくお願いいたします。 1)A群:X個 B群:Y個 C群:Z個(毎回群数、X,Y,Zを可変させたい)  からG個の組み合わせを生成する。 2)生成された組み合わせを別の組み合わせと重なるものを抽出する。 なにぶん、初心者なのでよろしくお願いいたします。

  • 重複組み合わせ

    x+y+z=21,1≦x≦10,1≦y≦10,1≦z≦10をみたす整数x,y,zの組は何通りあるか。 わからなかったので解答を見たのですが、わからなかったので質問させていただきます。 解答では、 X=10-x,Y=10-y,Z=10-zとして X+Y+Z=9 0≦X,Y,Z≦9      として、以下続いていきます。 なぜこのようになるのかが理解できません。考えれば考えるほどこんがらがってしまいました。重複組み合わせは理解しているつもりなのですが、重複組み合わせにいたるまでのこの過程で詰まっています。 典型的な問題なのでしょうが・・・分かりやすい解説をお願いします。

  • awk フィールドへの関連付け

    new X100 Y200 Z300 X111 Z333 old X100 Y200 Z300 X111 Y200 Z300 を同じものとして比較したいのです フィールドそのものはレコード2は違いますが new の レコード2のYは200なので 同じものです 正規表現などを使ってフィールド内のX Y Zをばらばらに読ませることは出来ました splitでそれを行うと X[1000] Y[500] Z[3000]などの差もうまれますし それぞれがどのフィールドにあったかを記憶させておく方法などが解りません 教えてください

  • 数学(組合せ)の質問です。

    数学(組合せ)の質問です。 問:x+y+z=15の正の整数解は何通りあるか。 解:x-1=X、y-1=Y、z-1=Zとおくと、X≧0、Y≧0、Z≧0   また、x+y+z=15より、(X+1)+(Y+1)+(Z+1)=15   よって、X+Y+Z=12、X≧0、Y≧0、Z≧0 ……(1)   求める正の整数解の個数は、(1)を満たす整数解(X,Y,Z)の個数に等しい。   これはX,Y,Zから、重複を許して12個取る組合せの総数に等しいので、     3H12=3+12-1C12=14C12=14C2=91(通り) という問題があるのですが、いまいちよく理解できません。 そもそも何のためにx-1=Xとおくのかも分かりません。 あと、  > 求める正の整数解の個数は、(1)を満たす整数解(X,Y,Z)の個数に等しい。  > これはX,Y,Zから、重複を許して12個取る組合せの総数に等しいので、 というのもよく分かりません… 初歩的な質問ですが、どなたか教えてください。 よろしくお願いします。

  • 重複組み合わせの問題

    重複組み合わせの問題で、問題集の回答を読んでも、理解できません。教科書には載っていないので、どう考えていいかも分かりません。解説していただけませんでしょうか? 問 x+y+z=12を満たす自然数の組はいくつあるか? 回答 x+1=X , y+1=Y , z+1=Z とおくと、    X+Y+Z=9   (ここまでは理解できます。)    X,Y,Zは負ではない。(?)    例えば、X=3 , Y=2 , Z=4 とすると (X,X,X,Y,Y,Z,Z,Z)の3種から重複して       9個をとる重複組み合わせを考える。  _______________________   ?くらいから、分からなくなりました。   ちなみに、答えは55通りです。   よろしくお願いします。               

  • 無限順列に対して無限組合せを考えると

    Aを要素が3つの有限集合{x,y,z}とします。Nを自然数の集合{1,2,3,4,…}とします。 写像:A→Nを考えます。 これは幾何学的には空間N^3を表しています。 また、解析的には、項数が3の自然数の数列を表してます。 例えばピタゴラス数(x^2+y^2=z^2を満たす自然数x,y,z)を考えるといった実用性があります。 以上のことを、組合せで考えます。 例えばピタゴラス数では、x^2+y^2=z^2を満たす自然数x,y,zに、同じ組合せを同一視したり、x<y<z、もしくは、x≦y≦zといった制限を与えることになります。 これはごく普通の考えと思います。 次に、Nを自然数の集合{1,2,3,4,…}とします。Aを要素が3つの有限集合{0,1,2}とします。 写像:N→Aを考えます。 これは組合せ論的には、3つの要素を無限個並べた順列を表しています。 また、解析的には、各項が0,1,2の無限数列を表してます。 例えば0≦x≦1の実数xの3進法表示(ただし、0.210222…=0.211000…といったような同一視をする)を考えるといった実用性があります。 以上のことを、(重複)組合せで考えてみると、3種類の数字の数列に対して、イレカエをしても同じになる並べ方を同一視することになります。 統計学的には、無限個並べた3種類の数字の度数分布を考えることになります。 絵描きが無限の溝があるパレットに、3種類の絵の具からひとつずつ選び、一定量を出して並べていった後、かき混ぜたときの色を考えることになります。 これもまあ普通の考えと思うのですが、いわゆる「無限組合せ」は聞いたことありません。 なにか実用性はあるのでしょうか。数学の他の分野と関連はあるのでしょうか。 実数(√2)-1の3進法表示で、無限桁の数字0、1、2の「割合」はそれぞれ1/3、1/3、1/3なのでしょうか? 3種類の数字のなんらかの数列(無限順列)に対して、「無限組合せ」を考えたときに、何か面白いことはあるのでしょうか。

  • 重複組合せの問題

    重複組合せの問題です。 問題集の解説を読んでも理解できません…。 どなたか教えてください。 --------------------------------------------------------------------------- x+y+z=11の解のうち、次の条件を満たすx,y,zの組(x,y,z)は全部で何組あるか。 (1)x,y,zは、すべて0以上の整数 (2)x,y,zは、すべて正の整数 ---------------------------------------------------------------------------- すみませんがよろしくお願いします。。

  • 組み合わせが何通りあるか

    昔学んだ順列組み合わせの知識をふりしぼっても解けないのでよろしくお教えください。 赤玉2個、白玉2個、緑玉2個がある。 x、y、zの3人でこの玉を2個ずつ分けるとき、その組み合わせは何通りあるか。 どのように考えたらよいでしょうか。

  • 体積の大小

    どちらの体積が大きいか考えているのですが、方法もしくは答えを教えてください。3次元の空間になると突然わからなくなるので、お願いします。 1<=x+y<=2 1<=y+z<=2 x,y,z={0,1} で表される空間の体積と 2<=x+2y+z<=4 で表される空間の体積hどちらが大きいのでしょうか? x,y,z座標が0以上の空間で考えています。

  • 組み合わせ問題の解説がわかりません

    w+x+y+z=5を満たす0以上の整数w,x,y,zの組み合わせはいくつあるか。 という問題の解説が w+x+y+z=5なので、5個のものを一列に並べて3つの仕切りを入れると考えると、合計8個を横一列に並べばよいので、8C3=56通りとなる。 とありますが意味が全くわかりません。この解説の意味と、もしくは他にもっと分かりやすい解き方があれば教えてください。

専門家に質問してみよう