質問: sqlで違うテーブルの値を比較して値に差があるレコードを抽出したいので sqlで違うテーブルの値を比較して値に差があるレコードを抽出したいのですがヒントをいただけないでしょうか。 下に例を作ってみました。(テキストに貼りなおしてもらうと見易くなると思います) <aテーブル> a1a2a3a4a5 ------- ------- ------- ------- ---------- xxxxxxx xx1abc32009/05/08 wwcwwcw ww2ccb12008/03/21 ddddddd dd1jpn52007/08/08 ggggggg gx9sox21977/01/04 fffffff usjnpb32001/09/11 <bテーブル> b1b2b3b4b5 ------- ------- ------- ------- ---------- xxxxxxx xx1ibichaoshimu2002/07/05 xxxxxxx xx1takeshiokada2005/07/15 xxxxxxx xx1kamoshu1857/09/25 wwcwwcw ww2waowao2008/10/22 ddddddd dd1uihhh2006/06/30 ddddddd dd1jojoj x5xx1999/09/09 ddddddd dd1momohara2005/03/07 ddddddd dd1itaiu-2003/12/22 ddddddd dd1komanogoal2007/04/26 ggggggg gx9 damerecord2009/11/14 fffffff usj ikitai1995/08/15 fffffff usj sstebuspi2004/01/05 fffffff usj bbpp2009/08/23 a1とb1は主キー、a2とb2は副キーです。 aテーブルの「a4」カラムにはbテーブルのレコード数を持っています。(主キー、副キーが同じものの) しかし、よくよく見るとaテーブルの「ggggggg」のa4には「2」のはずなのにbテーブルには実際にレコードは1つしかありません。 こういう状態になってしまっているのを割り出したいのですがどのようにa4とbテーブルで数があってないものを抽出できるでしょうか。 よろしくお願いいたします。
回答: 記載の内容が全てで難しいこと考えなくていいなら、minusを使ってはいかがでしょうか? select a1,a2,a4 from aテーブル minus select b1,b2,count(*) from bテーブル group by b1,b2 これでbテーブルの件数とa4の値が一致しないaテーブルのレコード(全項目ではないですが)が抽出できます。 余談ですが、b1は主キーとは言わないです。主キーとはテーブル内の一意のレコードを特定できるものを言います。 あと、oracleのバージョンも書いた方がいいと思います。バージョンによって使用できるsqlも違ってきますので。