• ベストアンサー

select文でゴミデータを検索したい!!

Oracle8i databaseに対するSQLについて教えていただきたく。 Table A(従業員)のRow_IDをキーにして3つの Table B(性別)、C(年齢)、D(部署)がそれぞれB.emp_id、C.person_id、D.target_id で関連付けられる場合に Table B、C、Dのどのテーブルにも関連付けられない宙ぶらりんなTable AのRow_IDの調べ方が分かりません。 尚、Table Aはマスター表でRow_IDの重複はありませんが、B、C、Dに関してはTabele Aのレコード1行に対してN行存在します。 誤ったレコードをTable Aに挿入してしまいメンテを行う為に宙ぶらりんになっているTable Aのレコードを調査したいのです。 どうか宜しくお願い致します。

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

  • ベストアンサー
  • kazu1213
  • ベストアンサー率60% (3/5)
回答No.2

select A.Row_ID from tblA A where not exists (select 'X' from tblB where Row_ID = A.Row_ID) and not exists (select 'X' from tblC where Row_ID = A.Row_ID) and not exists (select 'X' from tblD where Row_ID = A.Row_ID) order by Row_ID; ではどうですか?

noa104
質問者

お礼

回答有難う御座います。 ご教授いただきました方法で検索することが出来ました。 kazu1213さん、本当に有難う御座います。 初めて利用させていただきましたが、こんなに早く有効な手段を教えていただけるとは思っていませんでした。 回答をいただきました方々、本当に有難う御座いました。

その他の回答 (1)

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

SELECT A.Row_ID,B.emp_id,C.person_id,D.target_id FROM A,B,C,D WHERE A.emp_ID=B.emp_id … をSQL*Plusで実行しログに出力すれば一目瞭然にできませんか? ログはAccessかExcelで開けばフィールドや、Lengthで並べ替えも可能です。

noa104
質問者

お礼

早々の回答有難う御座います。 zap35さんの仰る通りただのselect文での結果で判断するという方法もあるのですが、質問時に記述しなかったのですが今回のABCDそれぞれのテーブルに数万から数百万のレコードが存在するのです。 今回はイメージしていただき易いよう従業員等の例えを付けさせていただいたのですが、この場合だとEXCELでは対応出来ませんしACCESSの環境が現在ありませんので、どうにかSQLで出せないかと思った次第です。 zap35さん、質問時に条件の記述が無く誠に申し訳ありませんでした。

関連するQ&A