- ベストアンサー
ACCESSの条件について
- ACCESSのシステムを作成している際に、一つの問題が解決したが新たな問題が発生しました。
- 解決した問題により、大量の条件をテーブルから抽出することが可能となりました。
- しかし、逆のパターンのデータを作成しようとした際に同じ内容のレコードが100件以上になってしまいました。なぜ同じレコードが複数作成されるのかについてご指摘とアドバイスを頂きたいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
なんか、その方法は見覚えがありますね。 検証はしっかりやってください。 (注意事項を追加しようとしたら、閉じられてしまったのでそのままなんですけど) 参考にされたのは、以下だったでしょうか? ACCESS クエリ 抽出条件が多い場合 http://oshiete1.goo.ne.jp/qa4719476.html なぜ、上記に追加しようとしたのかを例示してみます。 例えば、「T_条件」が以下の内容になっているとします。 FS FN 2 A 2 B で、Like で見る URL の内容が URL ACE DEF の2レコードだとすると、直積では URL FS FN ACE 2 A → ACE Like '*A*' で、抽出 ACE 2 B → ACE Like '*B*' で、抽出外 DEF 2 A → DEF Like '*A*' で、抽出外 DEF 2 B → DEF Like '*B*' で、抽出外 何を追加しようとしていたのか・・・・は、もしここで、 FS FN 2 A 2 C だったら URL FS FN ACE 2 A → ACE Like '*A*' で、抽出 ACE 2 C → ACE Like '*C*' で、抽出 DEF 2 A → DEF Like '*A*' で、抽出外 DEF 2 C → DEF Like '*C*' で、抽出外 となって、ACE は2レコードとして抽出されることになります。 1レコードにするためには、 GROUP BY URL とか、DISTINCT URL 等で重複を削除する必要があります。 または、あの回答記述を SELECT T1.FN FROM T1 WHERE EXISTS (SELECT 1 FROM TS WHERE T1.FN Like Choose(SP,"","*","*") & FN & Choose(SP,"*","*","")); に変更すべきと思います。なので、上記の逆は・・・・というと SELECT T1.FN FROM T1 WHERE NOT EXISTS (SELECT 1 FROM TS WHERE T1.FN Like Choose(SP,"","*","*") & FN & Choose(SP,"*","*","")); の様に EXISTS の前に NOT を記述すれば良いです。 ※※ この記述で、変更すべき点はわかってもらえたでしょうか ※ 冒頭にも記述しましたが、検証はしっかりやってください。
その他の回答 (1)
- chayamati
- ベストアンサー率41% (260/624)
すごく複雑な条件抽出ですね、とても全てを読み切ることは出来ません あくまで推測です FROM T_○, T_条件 IN 'D:\LOG\Database1.accdb' WHERE (((T_○.URL) Not Like Choose([T_条件].[SP],"","*","*") & [T_条件].[FN] & Choose([T_条件].[SP],"*","*",""))); ------------------------------------------------------ FROM T_○, T_条件は2つのテーブルですね これでwhere以下がなければ selectされるレコード数はそれぞれのレコード数の積になります 一方が期待通りで、一方が重複なのは Like Choose と Not Like Chooseのためです この重複を避けるには乱暴ですがT_除外データテーブル のどれかのフィールドを重複なしに設定します。 ※ このまま実行すると重複の警告が頻繁に出ます select文の前後に DoCmd.SetWarnings False と DoCmd.SetWarnings true を入れて下さい
お礼
アドバイス有難うございます。 初心者であるせいか?(複雑=無駄がある?)なsql文になってしまっているかと思います。 お教え頂きました方法もやってみます。 今後も宜しくお願い申し上げます。
お礼
有難うございます。 貼り付けて頂きましたURLの内容を参考にさせて頂きました。 条件が100件以上あり、基データも最大500万件超える場合があり(現在はテストデータですので件数は少ないですが)PCのソフトを学ぶタイミングを作れなく本を見たりネット検索をしたりして作成しております。 件数が膨大ですので、本来はもっと別な物を使った方が良いのでしょうが、中々社内で思う様に出来ないため難儀しております。 こんなレベルの低い人間ですので、検証すべき事にも気が付きませんでした。 まだ記述頂きました内容での変更は行えておりませんが、今一度見直しながら勉強したいと思っております。 今後も質問させて頂く事があるかと思いますが、宜しくお願い申し上げます。