- 締切済み
データーベースのテーブルのコードと言う列から、十個のあるコードのデータ
データーベースのテーブルのコードと言う列から、十個のあるコードのデータで、該当するレコードを検索する場合に、普通にSELECT文で、取得する以外に、その十個のコードの中で、テーブルに登録されてないものを取得する方法はありますか?
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- piroin654
- ベストアンサー率75% (692/917)
追加です。 tblAはいずれの場合も10個の検索 対象となるコードが格納されている テーブルとします。
- piroin654
- ベストアンサー率75% (692/917)
質問の意図と私の解釈が違って いたかもしれません。 データベースは何をお使いなのか わかりませんが、提示したSQL文の 解説をします。最初の不一致クエリ はAccess固有の検索方法なので取り 下げます。 テーブル名はtblA、フィールド(列)は コードという名前でコードを入れると いうことではありません。質問の中で 述べられている"テーブルのコードと 言う列"そのままです。ですから列の 名前が変わればたとえば「数字」と なればコードは数字とします。 つまり、WHERE tblA.コード=tblB.コード の場合はtblAのコードという列と tblBのコードという列が同じ場合 という意味です。 そして、比較するテーブルをtblB とします。 以下のSQL文、 SELECT tblA.コード FROM tblA WHERE NOT EXISTS (SELECT * FROM tblB WHERE tblA.コード=tblB.コード); は、一般的にはどのデータベース でも解釈できるはずです。これを そのまま実行するとtblAとtblBを 比較してtblBで使われていない tblAのコードがすべて表示されます。 次はあるテーブルのコードという列に 3が含まれているかという検索です。 これは直接検索する条件を指定する 方法です。この場合はtblAはでてき ません。 このテーブルをtblCとします。 SELECT tblC.コード FROM tblC WHERE tblC.コード=3; tblCのコードという列に3があれば 3が表示され、なければ何も表示 されません。 "WHERE句にコードの値を指定して、 書きたいのですが、"ということ ですので、二番目の方法が妥当 でしょう。使われていないコードを 検索するというのであれば、一番目 の方法が妥当です。 いかがでしょうか。
- piroin654
- ベストアンサー率75% (692/917)
補足ですが、NOT EXISTSのところで、 本来は、 SELECT tblA.コード FROM tblA WHERE NOT EXISTS (SELECT * FROM tblB WHERE tblA.コード=tblB.コード); のようにクエリに登録しますが、 Accessでは最初に提示したように 登録後に書き換えられます。これは Accessの方言だと思ってください。
- piroin654
- ベストアンサー率75% (692/917)
いろいろ方法はありますが、 一つは不一致くえりです。これは SQL文で作成もできますが、簡単 にはクエリの新規作成から不一致 クエリ作成のウィザードを起こして 作成できます。以下は二つの テーブルを比較して一致しない データを抽出するクエリの SQL文です。 tblAには10個のデータがあり、 tblBは検索されるテーブルです。 フィールドはそれぞれIDと コードを持っています。 SELECT tblA.ID, tblA.コード FROM tblA LEFT JOIN tblB ON tblA.コード = tblB.コード WHERE (((tblB.コード) Is Null)); あるいは、NOT EXISTSという述語 を利用した方法もあります。 SELECT tblA.コード FROM tblA WHERE (((Exists (SELECT * FROM tblB WHERE tblA.コード=tblB.コード))=False)); これは少し判りにくいかもしれませんが 二つのテーブルを比較して両方に共通 するレコードを抽出し、さらにその 共通性のないレコードをtblAから抽出 すつという方法です。 では。
お礼
詳しく説明してくれて有り難うございました。 ただ、実際に作る時はアクセスなどは使わないので、自動でさくせいしたりせずに、WHERE句にコードの値を指定して、書きたいのですが、その時にこの二つのアドバイスのやり方にどのようにして、条件句を入れたら良いのでしょうか? 二つのSELECT文の両方のWHERE句に、同じ十個のコードの指定をして、それを、組み合わせるのでしょうか? 組み合わせた書き方を実際に出来ればみせていただきたいです。 そうすれば、私もよく理解が出来ると思います。 よろしくお願いします。
お礼
お返事が遅れまして大変失礼しました。 ご説明の内容から判断して、このSRLの場合は、比較する対象のテーブルがある場合の様に考えられますが、例えばAというテーブルに対して10個のコードのうち、そのテーブルの「コード」と言う列に存在しないものを戻す様なSQLは、どの様に書けば良いでしょうか?