OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

オラクルDBでの不一致の検索

  • すぐに回答を!
  • 質問No.249130
  • 閲覧数1320
  • ありがとう数2
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 20% (24/115)

ORACLE8.0.5において
A-DB
 code char(10);
updte char(14);

B-DB
code char(10);

A-DBとB-DBにおいてcodeが不一致のデータの抽出をする場合、
select B-DB.code from A-DB,B-DB
where A-DB.code <> B-DB.code
and A-DB.updte >= '20020301000000'
and A-DB.updte <= '20020331235959';

上記のようなSQL文を作成し実行したが、A-DBのcodeに対してB-DBのcodeを全部検索し、B-DBの検索分がすべて不一致になってしまいました。 SQLの考え方がまちがっているのかわからないでいるので、アドバイスをお願いいたします。
通報する
  • 回答数3
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.3
レベル6

ベストアンサー率 77% (7/9)

B-DBに存在してA-DBに存在しないcodeを検索する場合は以下のSQLです。
select code from b-db
where not exists (select 'X' from a-db where code=b-db.code);

同じように、A-DBに存在してB-DBに存在しないcodeの検索は
select code from a-db
where not exists (select 'X' from b-db where code=a-db.code);
でできます。
お礼コメント
patak

お礼率 20% (24/115)

なんとかできました。B-dbの更新のからみでselectの発行が必要だったので助かりました。
投稿日時 - 2002-04-09 12:23:00
-PR-
-PR-

その他の回答 (全2件)

  • 回答No.1
レベル7

ベストアンサー率 18% (4/22)

SQLというよりはリンクするA表とB表の作成の仕方がおかしいのでは? よく見直してみるとわかると思うのですが、A表とB表をリンク付けるものがありませんよね? 恐らくは以下の事をやりたいのでは?と思いますが。 ------------------------------------- A表 B表 1行目 aaaaa 20020301000000 ...続きを読む
SQLというよりはリンクするA表とB表の作成の仕方がおかしいのでは?
よく見直してみるとわかると思うのですが、A表とB表をリンク付けるものがありませんよね?
恐らくは以下の事をやりたいのでは?と思いますが。
-------------------------------------
A表 B表
1行目 aaaaa 20020301000000 bbbbb
2行目 ccccc 20020314001100 ccccc
3行目 ddddd 20020331000001 eeeee
4行目 eeeee 20020401000000 fffff

で1行目と3行目のデータを抽出したい。
-------------------------------------
A表とB表をリンク(=)する情報がないと例えば、aaaaaに対して bbbbb,ccccc,eeeee,fffffをcccccに対してbbbbb,ccccc・・・・・
の様に各列に対して全てチェックしてしまうので
結果的にB表の全てのデータが当てはまってしまう結果になります。

そうしたいのであれば、
1. A表,B表に通番という列を追加
2. whereの条件に A.通番 = B.通番を追加
で、予想通りの結果が替えると思います。

一例ですが・・・。(汗;


  • 回答No.2
レベル10

ベストアンサー率 37% (64/169)

select code,updte from a-db where not exists (select code from b-db where b-db.code = a-db.code ) and A-DB.updte >= '20020301000000' and A-DB.updte <= '20020331235959'; ...続きを読む
select code,updte from a-db
where not exists
(select code from b-db
where b-db.code = a-db.code
)
and A-DB.updte >= '20020301000000'
and A-DB.updte <= '20020331235959';

ではどうでしょうか?
(Oracle 8.1.6では動作しました。)
お礼コメント
patak

お礼率 20% (24/115)

何とか実現できました。ありがとうございました。
投稿日時 - 2002-04-09 12:25:26
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
このQ&Aにこう思った!同じようなことあった!感想や体験を書こう
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ