• 締切済み

oracleでテーブルからのデータ抽出

以下の様なテーブルがあります。 テーブルから姓が同じで、名が一方はNULLで、一方はNULL以外である レコードを全て抽出したいのですが、どのようにすればよいですか。 お願いします。 ■tbl1 ID SEI MEI EMAIL ---- ----------------------- 1 yamada ichiro 2 yamada jiro 3 yamamoto taro 4 sato 5 sasaki taro 6 aoyama 7 akasaka 8 sasaki 9 saito saburo 10 hanada 11 saito 12 hosokawa kuro 13 hanada hanako 14 yamamoto 15 hanada taro 期待する結果 ID SEI MEI EMAIL ---- ----------------------- 3 yamamoto taro 14 yamamoto 5 sasaki taro 8 sasaki 9 saito saburo 11 saito 10 hanada 12 hosokawa kuro 13 hanada hanako 15 hanada taro

みんなの回答

  • y_shimizu
  • ベストアンサー率41% (27/65)
回答No.3

> and sei in(select t.sei from tbl1 t where t.mei is not null ) > を条件に追加したら上手くいくのでしょうか。 うまくいかないですか? 例としてテーブルのデータが以下のみである場合  1 yamada ichiro  2 yamada  3 yamamoto taro ここに以下3種類のselectをすると  クエリ1 select * from tbl1の結果(全件検索)   1 yamada ichiro   2 yamada   3 yamamoto taro  クエリ2 select sei from tbl1 where mei is nullの結果(meiがnullのもの)   2 yamada  クエリ3 select sei from tbl1 where mei is not nullの結果(meiがnullでないもの)   1 yamada   3 yamamoto meiがnullの行とmeiがnullでない行がほしいので、 クエリ2とクエリ3に共通で引っかかるyamadaをクエリ1の条件としたものが ほしいデータということになります。 なので、クエリ2とクエリ3を条件にクエリ1を投げているだけです。

abc999xyz
質問者

お礼

すみません。 上手くいきます。 > and sei in(select t.sei from tbl1 t where t.mei is not null ) を条件に追加したら、なせ、上手くいくのでしょうか。 の質問でした。 説明、解説ありがとうございました。

  • y_shimizu
  • ベストアンサー率41% (27/65)
回答No.2

じゃあ、こうですかね? select * from tbl1 where sei in(select t.sei from tbl1 t where t.mei is null ) and sei in(select t.sei from tbl1 t where t.mei is not null )

abc999xyz
質問者

お礼

ありがとうございます。 期待した結果が得られました。

abc999xyz
質問者

補足

すみません。 > and sei in(select t.sei from tbl1 t where t.mei is not null ) を条件に追加したら上手くいくのでしょうか。 理解不足ですみません。

  • y_shimizu
  • ベストアンサー率41% (27/65)
回答No.1

こういうことでしょうか? select * from tbl1 where sei in(select t.sei from tbl1 t where t.mei is null );

abc999xyz
質問者

補足

ありがとうございます。 確かに取得はできたのですが、姓が重複しない名がNULLの行も出力されます。 この行は除きたいです。