• ベストアンサー

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 ,う となってしまいます。 どうしたら良いか教えてください。 よろしくお願いします。

noname#5252
noname#5252

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

  • ベストアンサー
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。maruru01です。 データベースが何かわからないので、一般的なやつを。 SELECT * FROM A WHERE NOT EXISTS (SELECT * FROM B WHERE B.番号 = A.番号) ところで、どのデータベース(Access、SQL Server、Oracleなど)かを書きましょう。 また、現在希望の結果が得られていないSQLステートメントを載せた方がいいですよ。 では。

noname#5252
質問者

お礼

ありがとうございました。 解決しました。 ところで、ご指摘のあった「どのデータベースかを書きましょう」ですが、 もう、本当にすみません。 SQL=SQLServerかと思っていました。 これからは気を付けます。 本当にありがとうございました。

その他の回答 (1)

回答No.2

Access2000であれば データベースウインドウのクエリを選択しておいて 新規作成ボタンをクリックし、 ”不一致クエリ”ウイザードを起動すると簡単に 作成できます。(helpで不一致クエリを検索してみてください。) ちなみにこれによって作成されるクエリは下記となります。 SELECT テーブルA.項目番号, テーブルA.名称 FROM テーブルA LEFT JOIN テーブルB ON テーブルA.項目番号 = テーブルB.項目番号 WHERE (((テーブルB.項目番号) Is Null));

関連するQ&A

  • データ抽出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での抽出条件

    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を作成します。つまりBはデータがある場合とない場合があります。また、2つは関連番号で紐づいています。 Aテーブルを抽出したい時に、抽出条件は以下です。 ・Bテーブルのステータスが1であれば抽出 ・Bテーブルのステータスが0であれば非抽出 ・Bテーブルにデータがなければ抽出 INNER JOINだとデータがない時に抽出できないし、 WHERE句にCASE句を入れればいいのかなと思いましたが、テーブルにデータがあればなんて条件書けないしで詰まりました。 SELECTした結果に対して条件つけて抽出する手も思いつきましたが もっと美しいSQLがあれば教えてもらえないでしょうか。 環境はSQLServerです。よろしくお願いします。

  • 他テーブルで一致する列から名称を取得したい(SQL文)

    SQL文の作成方法が分からず困っています。 以下の実現はどのように行えばよろしいでしょうか? --------------------- テーブルA:(項目)キー番号、項目No テーブルB:(項目)キー番号、項目No1、項目No1名称、 項目No2、項目No2名称、項目No3、項目No3名称 --------------------- とします。 ここで、テーブルA、Bでキー番号が一致し、 テーブルAの項目Noで、テーブルBの項目No1~3のどれかと 一致した場合、項目名称をテーブルBより取ってきたいです。 出力する時、項目No、項目名称は1個のみ出力したいです。 項目No1~3にない場合も名称空白でそのまま出力します。 (データ例) テーブルA: 100,1 100,4 110,5 テーブルB: 100,1,項目名1,2,項目名2,3,項目名3 110,3,項目名3,4,項目名4,5,項目名5 結果: 100,1,項目名1 100,4,(空白) 110,5,項目名5

  • SQL の抽出方法

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

  • SQLの抽出方法を可能か教えてください

    初めましてm(__)m SQLを最近始めたばかりの為、次のような場合の抽出条件がわかりません。 どなたかご存知の方がいましたら、回答をよろしくお願いいたします。 次のようなDBがあったとします。 項目1  項目2  項目3 001   aaa   003 002   bbb   005 003   ccc   004 004   ddd   005 このDBに対し、検索条件を項目1=004とした場合に、次のように抽出したいのですが、どうすればよろしいですか? 001   aaa   003 003   ccc   004 004   ddd   005 ※項目1の値が項目3と一致したらそのデータも抽出し、更にそのデータの項目1の値が項目3と一致したらそのデータも抽出するみたいにしたいと考えているのですが可能でしょうか? 以上です。 分かる人がいましたら、よろしくお願いします。

  • 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 です。

  • 一致する項目が最も多いものを抽出する方法は?

    エクセルの初心者です。 関数で今日の注文を入力すると過去の注文から 今日の注文と項目が一致する または一致する項目が最も多い注文番号を抽出する方法をおしえてください。 Sheet1 注文番号 0924 項目1 A-1 項目2 A-5 項目3 B-3 項目4 C-7 上が今日の注文とします。 これを下の過去の注文リストと照合させて一致するまたは一致する項目の最も多い 注文番号を抽出したいのです。 Sheet2 注文番号 0920  0919 0918 0917 項目1 A-2 A-1 B-2 A-1 項目2 A-5 B-1 B-3 A-5 項目3 B-3 C-1 B-1 項目4 B-4 D-1 B-3 項目5 C-7 項目の数量は日によって変わります。 Sheet1と2は同一シートにすることも可能です。 抽出する項目は上からABC順などに並んでいないと不可能でしょうか。 ご多忙の中申し訳ございませんがよろしくお願いします。

  • データの無いテーブルと結合してデータ抽出

    以下のテーブルを使用してデータを抽出したいのですが、データが抽出できません。 名称テーブル -------------------- ID | NAME | -------------------- 0   AA 1   BB 2   EE 3   FF 履歴テーブル -------------------- ID | DAY | OLDNAME -------------------- 2   2004   CC 3   2004   DD 結果取得したいデータ -------------------- ID | NAME | OLDNAME -------------------- 0   AA =現在のSQL= SELECT A.ID, A.NAME, B.OLDNAME FROM 名称 A , 履歴 B WHERE A.ID = B.ID(+) AND A.ID=0 AND B.DAY =  (SELECT MAX(C.DAY)  FROM 履歴 C  WHERE  A.ID = C.ID(+)) 履歴テーブルには名称テーブルの履歴があります。 履歴にデータが無くても名称データを取得したいのですが、こういった場合はどのようなSQLを作ればいいのでしょうか。

  • 【Access】部分一致で不一致データを抽出したい

    クエリで2つのテーブルから、不一致データを抽出したいのですが、 完全一致だけでなく部分一致のデータも一致データとして取り除きたいです。 [テーブルA]フィールド1 000-0001 000-0001A 000-0002 000-0003 000-0004 [テーブルB]フィールド2 000-0001 000-0002 というようなデータで、結果は [結果] 000-0003 000-0004 というふうにしたいです。 (000-0001だけでなく000-0001Aというデータも取り除きたいのです。) Access初心者で、クエリウィザードを使用した重複データ抽出、不一致データ抽出、 およびクエリデザインを使用した重複データ抽出が何とかできる程度です。 初心者でも分かるようにご回答いただければ大変助かります。 よろしくお願いいたします。