• ベストアンサー

【SQL】他テーブルに含まれる値に合致する行を抽出

SQL素人ですが、SQLが使えるツールからデータを抽出したく、SQL文を教えていただけますでしょうか。 ・テーブルA:会員データが格納されている(氏名、メルアド、郵便番号等が入っている) ・テーブルB:特定の郵便番号のみが入っている テーブルAのデータの中からテーブルBに入っている郵便番号に合致するメルアドを抽出したい。 何卒宜しくお願い申し上げます。

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

  • ベストアンサー
  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.1

>SQLが使えるツール によって変わってくる場合がありますが、 SELECT メルアド FROM テーブルA WHERE 郵便番号 IN (SELECT 郵便番号 FROM テーブルB) とか。

harerutoii
質問者

お礼

実際に試してみたところ、nicotinism様に教えていただいたSQLでも 私の調べてみたSQLでも同じ結果が得られました。 ※nicotinism様のSQLの方がスマートな印象ですね^^ この度はありがとうございました!!

harerutoii
質問者

補足

さっそくありがとうございます。 自分でも少し調べてみました。 下記だと違う結果になるものでしょうか? SELECT テーブルA.氏名, テーブルA.メルアド, テーブルA.郵便番号 FROM テーブルA, テーブルB WHERE テーブルA.郵便番号 = テーブルB.郵便番号; 2つのテーブル テーブルA と テーブルB とから 「郵便番号」に記された値が等しい行を選択して 列「氏名」,「メルアド」,「郵便番号」を表示する。 質問ばかりですみませんが、何卒宜しくお願い申し上げます。

関連するQ&A

  • 2つのテーブルで一致しているものを抽出する。SQL文で作成。

    OS:WindowsXP SQLServer2000 <質問> SQL文が浮かばなくて困っています。 どなかたお力を貸していただけないでしょうか。 以下、やりたいことです。 【条件】 1 AテーブルとBテーブルで郵便番号が一致しているものを抽出 2 AテーブルとBテーブルに「番号」列を追加し、初期値を「0」とする 3 1の抽出後、同じ郵便番号がBテーブルに複数あった場合、   2で追加した「番号」列を0→”抽出した行分の数字”にする。 一応、【条件】1の箇所(下記)は浮かんだのですが、 2と3が分かりません。 select Aテーブル.*,Bテーブル.* from Aテーブル,Bテーブル left outer join Aテーブル on Aテーブル.郵便番号 = Bテーブル.郵便番号 WHERE ??? ●Aテーブル ID  | 名前 | 郵便番号  | 番号 ----------------------------------------------------------------- 01 |  小林 | 101-1000 | 0 02 |  鈴木 | 102-1000 | 0 03 | 田中  | 103-1000 | 0 04 | 町田  | 104-1000 | 0 05 | 木村  | 105-1000 | 0 06 | 中田  | 106-1000 | 0 ●Bテーブル ID | 分類  | 郵便番号   | 番号 --------------------------------------------------------------------- 01 | AAA  |  101-5555  | 0 03 | CCC  | 103-1000  | 0 04 | DDD  | 104-1000  | 0 05 | EEE  | 105-1000   |  0 06 | FFF  |  105-1000   | 0 07 | GGG  | 106-1000  | 0 08  | HHH  | 106-1000   | 0 09 | KKK  | 106-1000   | 0 ↓出したい結果↓ ID  | 名前 | 郵便番号   | 分類  | 番号 ------------------------------------------------------------------------------- 03 | 田中 | 103-1000  | CCC   |  0 04 | 町田 | 104-1000  | DDD  |  0 05 | 木村 | 105-1000  | EEE  |  2 05 | 木村 | 105-1000  | FFF  |  2 06 | 中田 | 106-1000  | GGG  |  3 06 | 中田 | 106-1000  | HHH  |  3 06 | 中田 | 106-1000  | KKK  |  3 以上になります。 どうぞよろしくお願い致します。

  • SQLでの抽出条件

    SQL初心者です。初歩的な質問だと思いますが、ご教授願います。 以下のような2つのテーブルがあります。 【テーブルA】 グループ 社員番号 A 1 A 2 A 3 B 4 B 5 B 6 C 7 C 8 D 9 D 1 【テーブルB】 社員番号 1 9 テーブルBの社員番号と一致する場合、テーブルAをグループ単位で抽出しないようにしたいです。  ・グループAは社員番号1が一致するため抽出しない。  ・グループDは社員番号1と9が一致するため抽出しない。 【取得結果】 グループ 社員番号 B 4 B 5 B 6 C 7 C 8 説明が分かりづらくて申し訳ありませんが、よろしくお願い致します。

  • SQLでデータを抽出する方法

    テーブルAとテーブルBがあり、AとBには「項目番号」と言うフィー ルドがそれぞれある。 この時、Aの「項目番号」とBの「項目番号」が一致しないデータを 抽出したい。 例: A:番号,名称   1 ,あ   2 ,い   3 ,う B:番号   1   4   5 この場合、抽出したいデータは、  番号   2 ,い   3 ,う なのですが、どうしても、   1 ,あ   1 ,あ   2 ,い   2 ,い   2 ,い   3 ,う   3 ,う   3 ,う となってしまいます。 どうしたら良いか教えてください。 よろしくお願いします。

  • データ抽出SQLについて

    以下の様なテーブル内容のデータがあり、抽出条件:項目Aが同一でかつ、その項目Aに対する項目Bの値がひとつでも異なっている項目Aを抽出するSQLについて教えてもらえないでしょうか。よろしく御願い致します。 <データの内容> 項目A 項目B 0001 A 0001 A 0002 A 0002 B 0003 C 0003 A 0003 A 0004 B 0004 B 0004 B 0004 B <抽出結果> 0002 0003

  • SQL の抽出方法

    あるテーブルABC に項目aとbとc があるとします。 今、抽出の条件が 仮にa=1,b=2 として、 この条件で複数件のデータが抽出され その中からcが最大のデータ1件のみを抽出するとします。 このSQLを作成する場合、 どのような方法がありますでしょうか? select文で、1度cのmax値を求めないといけないでしょうか?

  • SQL文 特定のレコードを抽出したい

    以下のようなテーブルAがあったとします。 年月日,項目B ---------------------- 20080101 100 20080102 100 20080103 200 20080104 400 20080105 400 20080106 200 SQL文にて、データの抽出を行いたいのですが、 抽出したいのは、データに変更があった年月日と項目Bの値です。 年月日,項目B ---------------------- 20080101 100 20080103 200 20080104 400 20080106 200 前の年月日と比較し、項目Bに違いがあった場合のデータだけ抽出したいのですが、SQL文で行うことは可能でしょうか?? 環境は、SQL Server 2005 です。

  • SQL文で他テーブルの件数も同時に求めたい

    SQL文について教えてください。(DBはSQLサーバー2000です。) 以下のように2つのテーブルがあります。Aテーブルのフィールド項目の抽出と、AテーブルのIDフィールドと同じ値のBテーブルの件数を同時に抽出したいのですが、どのように書いてよいか分かりません。恐れ入りますが、教えていただけないでしょうか? テーブルA  ID name Age -------------- 1  太郎 20 2  二郎 35 3 花子 26 テーブルB ID memo ------------------ 1  私は男です 1  東京に住んでます 2  友達が3人います 3 私は彼氏がいます 3  先日TDLに出かけました。 3  ランチはカレーでした。 要約すると、Aテーブルの全情報とテーブルBの件数を同時に抽出したいのです。以下のようなイメージです。 name Age テーブルB件数 ------------------- 太郎、20、 2 二郎、35、 1 花子、26、 3 よろしくお願い致します。

  • 抽出した行数を変数に入れたい(オラクルSQL)

    SELECTで抽出した行数を変数に格納したいのですが、上手くいきません。 SQLにあまり経験がなく、ネットで調べながら実践しております。 例えば以下の簡単なSQLを作ったとして、 ---------------------------------------------------- SELECT a,b,c,d,e,f FROM table WHERE c=10 AND e=20; ---------------------------------------------------- ここで抽出した行数を取得し、それを変数に入れたいと思っております。 というのも、後々、抽出したデータの行数を表示したい場合に SELECT COUNT(*) FROM table WHERE c=10 AND e=20; というSQLをその都度入力していては非効率だと思ったからです。 そこで抽出する際に行数を取得し、それを変数に格納して、 行数を表示する処理が今後必要になった際に、その変数を表示すれば良いと考えました。 ですがネットで変数のことを調べた際に VARやDEFINE等のコマンドを見つけましたが、SQLを実行しても上手くいきません。 最初に記載したSQLに、どのような構文を入れたら良いのでしょうか。

  • SQL 重複データの抽出

    こんにちは SQLで教えてください 今 会員番号ごとの重複データがあります 例  会員番号 日付    金額 住所 その他1 その他2     1 2001/01/01  120 XXXX YYYYY  UUUUUU     1 2001/12/01  130 XXX YYYYY IIIII ⇒ 2 2001/08/12 50 pppp iiiii ooooo 3 2003/01/06 60 iiiii iiii uuuuu ⇒ 3 2002/03/18 10 22222 eeeee nnnnn 3 2001/08/19 500 ddddd rrrrr rrrrr 上記の様なデータで会員番号ごとで日付の最大のレコード(同一日なら入力順に最初)のレコードを抽出したいのですが distinctを使うと会員番号と日付のデータしか抽出されませんので その他の項目も抽出したいのですが... SQLでできなければ VB2005でもいいのですが?....   どうかよろしくお願いします。

  • SQLにて順列の抽出

    MySQLにてSELECT文にて順列の抽出をしようと試みていますが、順列を出すためのSQL文がわからず困っています。 TABLE1 +-----+-----+-----+-----+ | NUM | A | B | C | +-----+-----+-----+-----+ | 101 | 0 | 4 | 9 | +-----+-----+-----+-----+ | 102 | 2 | 2 | 0 | +-----+-----+-----+-----+ 例えば上記の様なテーブルがあって、NUM=101のA,B,Cを取り出して 049 094 409 490 904 940 のような順列を作り出してPHPから渡した変数D(仮にvar=409)と照らし合わせようと試みていますが、1つの行の中の数字で順列を抽出するSQL文がわからず困っていますので、ご教授願います。

    • ベストアンサー
    • MySQL