- 締切済み
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
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- y_shimizu
- ベストアンサー率41% (27/65)
> 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を投げているだけです。
- y_shimizu
- ベストアンサー率41% (27/65)
じゃあ、こうですかね? 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 )
お礼
ありがとうございます。 期待した結果が得られました。
補足
すみません。 > and sei in(select t.sei from tbl1 t where t.mei is not null ) を条件に追加したら上手くいくのでしょうか。 理解不足ですみません。
- y_shimizu
- ベストアンサー率41% (27/65)
こういうことでしょうか? select * from tbl1 where sei in(select t.sei from tbl1 t where t.mei is null );
補足
ありがとうございます。 確かに取得はできたのですが、姓が重複しない名がNULLの行も出力されます。 この行は除きたいです。
お礼
すみません。 上手くいきます。 > and sei in(select t.sei from tbl1 t where t.mei is not null ) を条件に追加したら、なせ、上手くいくのでしょうか。 の質問でした。 説明、解説ありがとうございました。