前提・実現したいこと
AccessVBA、SQLを使用しています。
条件にあったレコードの対象フィールドにフラグ("選択済")を入力して、条件を変えてまたフラグを入力して、という連続した処理を行いたいのですが、AccessVBAでSQLを書くと、UPDATEステートメントではサブクエリを使えないらしい、ということが調べてみて分かりました。
下記のようなコードをイメージしていました。
また、後続のコードではこのコードのサブクエリWHERE句の条件を変えたり、フラグ入力するフィールドを変えたりしたものをいくつも書いて、連続した処理としたいです。
UPDATEで更新できない場合、中間テーブルを用意してそっちに一度フラグ内容を入力して、そこから結合させる、といった回りくどい方法しか思いつかなかったのですが、もっと効率的な良い方法はないでしょうか。
できれば一つのSQL文だけでテーブルの更新まで行いたいと思っているのですが、調べてもわからず行き詰まっていました。
もし、ヒントや方向性、参考になるような事例だけでもあればご教示いただけるとありがたいです。
※初心者なので、そもそもの認識や知識が間違っているようでしたらそれもご指摘いただけると大変助かります。
どうぞよろしくお願いいたします。
VBA
1 2Dim db As DAO.Database 3Set db = CurrentDb 4 5Dim mySql As String 6 7mySql = "UPDATE Tab1" 8mySql = mySql & " SET col1 = "選択済"" 9mySql = mySql & " WHERE EXISTS" 10mySql = mySql & " (SELECT TOP 30 * from Tab1" 11mySql = mySql & " WHERE col2 = 1" 12mySql = mySql & " ORDER BY Rnd([主キー]))" 13 14db.Execute mySql, dbFailOnError 15 16------ 17以下の通りサブクエリ内の条件を一部変えて、同様の処理をいくつも続ける 18(SELECT TOP 30 * from Tab1 19WHERE col2 = 2 20ORDER BY Rnd([主キー])) 21 22------ 23・ 24・ 25・ 26
補足情報(FW/ツールのバージョンなど)
Access2016
回答3件
あなたの回答
tips
プレビュー