• ベストアンサー

片方のテーブルに存在しないレコード取得したい

OracleのSQL文を教えて下さい。 -tableA- key1,key2 001,1 002,2 002,1 003,2 -tableb- key1,key2 001,1 002,1 取得したいレコード 002,2 003,2 お願いします。

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

  • ベストアンサー
  • mk33752
  • ベストアンサー率33% (1/3)
回答No.1

select * from tableA where not exists ( select * from tableB where tableA.key1 = tableB.key1 and tableA.key2 = tableB.key2 ); でどうでしょう?

wan-chan
質問者

お礼

できましたー! ありがとうございました。

その他の回答 (2)

  • Mizyu
  • ベストアンサー率41% (245/593)
回答No.3

> EXISTSとどちらが早いんでしょうね。 私の同僚の話ですと、どちらも僅差であり、状況によって変わる、とのことです。 多分、内部での検出のロジックは同じ道を辿るのではないでしょうか? ですから、ソースに落としたときにわかりやすい方をお勧めします。

  • Mizyu
  • ベストアンサー率41% (245/593)
回答No.2

SELECT Key1,Key2 from tableA MINUS SELECT Key1,Key2 from tableb ; でできます。 速度的には一件ずつの比較になるので遅いです。

wan-chan
質問者

お礼

できました。 ありがとうございます。 EXISTSとどちらが早いんでしょうね。

関連するQ&A

  • SQL:テーブル結合で該当レコードがない場合

    SELECT TableA.ID,SUM(TableA.量),TableB.金額 FROM TableA,TableB WHERE TableA.ID = TableB.ID GROUP BY TableA.ID,TableA.量,TableB.金額 こんな感じのSQLなんですが TableAをメインテーブルとして ↓のような結果を得るように作り変えれないか考えています ■TableBとの結合レコードあり(金額登録あり) 1,50,1500 ■TableBとの結合レコードあり(金額登録なし) 1,50,(NULLかスペース) 考えているんですが思いつかないのでヒントいただけたらと思います。宜しくお願いします。

  • INSERT INTO文教えて下さい。Oracle9i

    KEY1,KEY2をもとに、 TableAに存在して、 TableBに存在しないレコードをTableBにINSERTするSQL文 TableA Key1,key2,field1,field2 001,1,1,3 001,1,2,3 003,1,2,3 004,1,2,3 TableB key1,key2,field1,field2 003,1,2,3 004,1,2,3 存在しないレコード 001,1 ↓ これをTableBにINSERTする。 その場合、field1は小さいものを使用する つまり、 001,1,1,3 というレコードを作成する

  • テーブルの内容で更新したいのですが

    下記のようにテーブルがあります。 TableA colA colB ---- ----  A   1  B   2  C   3 TableB colA colB ---- ----  A   1  A   2  C   3 TableAに対してTableBとcolAが一致するcolBの合計を加算したいのです。 結果として TableA colA colB ---- ----  A   4  B   2  C   6 AはTableBに2レコードあるので合計3が加算されて4 BはTableBにレコードがないので変わらず2 CはTableBに1レコードあるので3が加算されて6 SQLでこのような更新処理(update)はできないでしょうか? よろしくお願い致します。

  • 3つのテーブルを結ぶSQLの書き方

    お世話になります。 3つのテーブルを結びつけるSQLの書き方がわかりません。ご指導お願いします。 [TableA][ID] [TableB][ID] [TableC][ID] [TableA]と[TableB]をLEFT JOINでつなぐ。 上の結果を[TableA][ID]と[TableC][ID]でInner joinでつなぐ。 つまり・・・ SELECT TableA.ID,TableB.ID FROM TabelA LEFT JOIN TableB→この結果 SELECT TableA.ID,TableB.ID TableC.ID From この結果 INNER JOIN TableC ON TableA.ID = TableC.ID こんな感じのことをやりたいのですが、記述の方法がわかりません。 どなたかお知恵をお貸しください。

  • 不要なwhere文が混じった重複レコードのカウント

    下記のSQL文があります。 tableA内で、tableA.id(A.id)は重複があります。 tableA内でのtableA.id(A.id)の重複レコード数をcount関数などでSELECTしたいのですが、 下記SQL文からどのように付け加えたらいいのか、お分かりの方いますでしょうか? SELECT A.id as id, A.xxx as xx, A.yyy as yy, B.zzz as zz FROM tableA A, tableB B WHERE A.id = B.id AND A.xxx = x AND A.yyy = y なお、「A.yyy = y」という条件は、tableA.idの重複レコード数をカウントする上で必要な条件なのですが、 「A.xxx = x」という条件は、tableA.idの重複レコード数をカウントする上で、不要な条件です。 以上、よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • 異なるテーブル間の和

    テーブルAの属性item1とテーブルBのitem1の和を求めるにはSQLでどのように記述すれば良いのでしょうか?? tableA ------ id item1 item2 pointer tableB ------ id item1 item2 pointer という2つのテーブルで,tableBのpointerはtableAのidを指しています.

  • truncate文で全テーブルを一気に削除できるか?

    さきほどと似たような質問ですみません。 SQLコマンドであるデータベースの全テーブルを削除したいんですが、 truncate一文ですませる方法はないでしょうか。 それとも、一行ずつ truncate tableA truncate tableB .... とやっていくしかないのでしょうか?

  • 1つのテーブルから複数のテーブルへのデータ振分け

    MySQLを使用して、tableAというテーブルのデータを tableB,tableC,tableDというテーブルに振り分けたいと思っています。 1日1回、自動的に行いたいと思っています。 たとえば、tableAのテーブル構成が下記のようなもので ================== name sex birth address phone email company ================== name,address,phoneはtableBに name,sex,birthはtableCに name,companyはtableDに分けるというような イメージです。 私の考えでは、下記のようなSQL文をPHPから呼び出して、タスクで 実行させてそれぞれ別のテーブルに振り分けようと思っている のですが、、もっと良いツールや方法があればお教えいただけ ませんでしょうか。 宜しくお願いいたします。 ---------------------------------------------------------------------------------------------------- INSERT INTO tableB (name,address,phone) SELECT tableA.name,tableA.address,tableA.phone FROM tableA AND INSERT INTO tableC (name,sex,birth) SELECT tableA.name,tableA.sex,tableA.birth FROM tableA AND INSERT INTO tableD (name,company) SELECT tableA.name,tableA.company FROM tableA; ----------------------------------------------------------------------------------------------------

  • 2つのテーブルをLIKE演算子のように結合させたい

    こんにちは DB2 ver 8.1 fixPak5 VB6 にて開発を行っております。 TABLEa の NAMAEa KANKEIa TABLEb の ADANAb FLAG というテーブルがあるとします そしてそれぞれのテーブルに TABLEa のNAMAEa に '山田' TABLEb のADANAb に '山' というデータがはいっていたとき この2つのデータをLIKE演算子のように結合させたいのですが、どのようにしたらいいのでしょうか。 イメージとしては SELECT NAMAEa, KANKEIa, FLAG FROM TABLEa LEFT OUTER JOIN TABLEb ON NAMAEa LIKE ADANAb% 伝わるでしょうか・・・ できたら1つのSQL文で完結させたいです。 駄目だったらRecordSetにもたせて処理しようかと思いますが、 今後の為にも何か方法があるのでしたら教えてください。

  • 異なるテーブルのレコード削除

    オラクル初心者です。宜しくお願いします。 AAA、BBB、CCCというテーブルがあると仮定します。 画面から入力された値(ddd)をキーとして、CCCテーブルから該当するレコードをセレクト文で引っ張り、eeeという値を抜き出したとします。 そのeeeという値をキーにAAA、BBBテーブルのレコードを削除するにはどういうSQLを発行すればよろしいでしょうか? "delete from AAA, BBB where eee = (select eee from CCC where fff = ddd);" では駄目でした。 質問が下手でわかりにくいかもしれませんが、どうかご教授お願いします。