• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:アクセス2010 他テーブルを参照してCount)

Access 2010で異なるテーブルを参照してCountする方法

このQ&Aのポイント
  • Access 2010で異なるテーブルを参照してCountするには、DCount関数を使用します。
  • テーブルAの[F1]列の値の末尾が「1」である条件を満たすレコードに対して、テーブルBの[F1]列の数をカウントします。
  • DCount関数を使用することで、目的の結果を得ることができますが、処理時間がかかることがあります。より効率的な方法があれば、それを検討することをおすすめします。

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

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

ちなみに、テーブルA、テーブルB のレコード件数は何件ぐらいですか。 > >rs2.Index = "F1" > でつまずき、先に進めませんが、 テーブルB の「F1」フィールドにインデックスは設定してありますか。 設定してないとエラーになります。 一時テーブル(テーブルC)を使うなら、 [C1] フィールドの「インデックス」プロパティを「はい(重複あり)」に設定しておいて、下記のコードを実行でどうでしょうか。 CurrentDb.Execute "DELETE * FROM テーブルC" CurrentDb.Execute "INSERT INTO テーブルC ( C1 ) " & _ "SELECT Left([F1],1) FROM テーブルA " & _ "WHERE F1 Like '*1';" CurrentDb.Execute "UPDATE テーブルB INNER JOIN テーブルC " & _ "ON テーブルB.F1 = テーブルC.C1 " & _ "SET テーブルB.F2 = [F2]+1;"

situmonnsya
質問者

お礼

>テーブルA 5,000件~10,000件 >テーブルB 20件~150件 上記を1セットとして、同じ構造でデータの違うセットが10本です。 >"SET テーブルB.F2 = [F2]+1;" "SET テーブルB.F2 = テーブルB.F2+1;"にしました。 こんなことができるんですね。 ただ最初は、F2の規定値がNullだったので結果がでませんでしたが「0」の規定値でうまくできました。 結果、 早い!!!瞬時です。 早いというより、処理中って感じがないです。 Count関数はやはり重い処理なんですね。Dcountはもっと? おかげ様で快適なデータベースになりました。 今後もよろしくお願い致します。 ありがとうございました。

その他の回答 (1)

回答No.1

まずは、テーブルA の F1 にインデックスを設定しておいて、 DoCmd.RunSQL _ "UPDATE テーブルB SET テーブルB.F2 = " & _ "DCount(""*"",""テーブルA"",""F1 Like '*1' AND F1 Like '"" & [F1] & ""*'"");" これでダメなら、DAO か ADO で更新する方法です。 テーブルA の F1 と テーブルB の F1 にはインデックスを設定しておいてください。 また、DAOに参照設定が必要です。 Dim stSQL As String Dim rs1 As DAO.Recordset Dim rs2 As DAO.Recordset stSQL = "SELECT [テーブルB].F1, COUNT([テーブルA].F1) AS F2 " & _ "FROM テーブルB INNER JOIN テーブルA " & _ "ON [テーブルA].F1 Like [テーブルB].F1 & '*' " & _ "WHERE [テーブルA].F1 Like '*1' " & _ "GROUP BY [テーブルB].F1;" Set rs1 = CurrentDb.OpenRecordset(stSQL, dbOpenSnapshot) Set rs2 = CurrentDb.OpenRecordset("テーブルB", dbOpenTable) rs2.Index = "F1" Do Until rs1.EOF rs2.Seek "=", rs1!F1 rs2.Edit rs2!F2 = rs1!F2 rs2.Update rs1.MoveNext Loop rs1.Close: Set rs1 = Nothing rs2.Close: Set rs2 = Nothing

situmonnsya
質問者

補足

hatena1989様、いつもありがとうございます。 ひとつ目の方法は >F1 にインデックスを設定 Dcount  ほとんど変わらず、でした。 ふたつ目の方法 >rs2.Index = "F1" でつまずき、先に進めませんが、 stSQL文をクリエデザインの「SQLビュー」に書き試してみましたが、速度は変わりませんでした。 そこで、 テーブルAの文字データをLeft,Rightで分解し、1文字のテーブルを作り "INSERT INTO テーブルC ([C1]) SELECT Left(テーブルA.[F1],1) FROM 条件" "INSERT INTO テーブルC ([C1]) SELECT Mid(テーブルA.[F1],2,1) FROM 条件" "INSERT INTO テーブルC ([c1]) SELECT Mid(テーブルA.[F1],3,1) FROM 条件" [F1] a b a a a h c d g h それをテーブルBを参照して、Countする方法はないでしょうか?

関連するQ&A