プロが教えるわが家の防犯対策術!

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の考え方がまちがっているのかわからないでいるので、アドバイスをお願いいたします。

A 回答 (3件)

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);
でできます。
    • good
    • 0
この回答へのお礼

なんとかできました。B-dbの更新のからみでselectの発行が必要だったので助かりました。

お礼日時:2002/04/09 12:23

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では動作しました。)
    • good
    • 0
この回答へのお礼

何とか実現できました。ありがとうございました。

お礼日時:2002/04/09 12:25

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.通番を追加
で、予想通りの結果が替えると思います。

一例ですが・・・。(汗;
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!