dポイントプレゼントキャンペーン実施中!

ID・名前・カナ・備考の4項目をもつ氏名テーブルがあり、同じ名前・カナのレコードはまとめてしまいたいと考えています。
IDは最小のものを、備考は全レコードをくっつけて一つのレコードにする予定です。
Group Byしてcount(*)>1の名前・カナを抜き出し、抽出した名前・カナでWhereしてMIN(ID)や備考をSELECTしたいのですが、カナ=NULLの場合があり、Group ByまではできてもWhereでSelectすることができません。
nvl(カナ,'999999')=nvl(抽出したカナ,'999999')だとWhereで取得することもできるのですが、カナ='999999'と入力されているとNULLとの区別がつかなくなります。
Is NULLを使わず、NULL項目をWhere条件で取得する方法をご存知の方、教えてください。よろしくお願いします。

サンプルとして単純なテーブルを例にあげましたが、実際は数十の列項目をもつ数十のテーブルです。列項目の中には4000バイトのものもあります。
完璧にやるのならGroup Byせず、全レコードをOrder Byしてキーが変わったら更新するというやり方が望ましいのでしょうが、レコード数が多く、パフォーマンス的にあまり望ましくありません。
できるだけ作業が簡単な方法だと助かります。

A 回答 (1件)

>Is NULLを使わず、



これに関しては、こんな感じ。

select *
from
TARGET X,
(select 名前,カナ from TARGET group by 名前,カナ having by count(*) > 1) Y
where decode(X.名前,Y,名前,1,0)=1 and decode(X.カナ,Y,カナ,1,0)=1;

比較演算子(=)は使えないけど、DECODE関数はNULLでも適切な評価をします。


最後の更新がどうたら・・というあたりは言わんとすることが理解できません。
    • good
    • 0
この回答へのお礼

お礼が遅くなって申し訳ありません。ご回答ありがとうございます。比較する項目をイコールで結ぶことばかり考えていたので目からウロコです。勉強になりました。

お礼日時:2007/04/23 06:33

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