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

住所情報がない場合であっても、NULLで抽出してきてほしい。

以前、ここで質問していただき、解決したのですが、
新たな問題が発生したので、改めて質問させてください。

他にも色々なテーブルと連携してSQLで情報を抽出しているのですが、
住所情報の入っているテーブルに住所情報がない人が居ます。
ただし、その人の住所以外の個人情報もピックアップして出力したいので、
住所情報が無い人は、住所の列はNULLで出力したいです。

下記に以前質問した時の情報も載せます。

・下記テーブルの他にもいろいろなテーブルと結合させています。
・各テーブルとの結合は個人IDで行っています。

方法はどんな形でも構いません。
もっと細かい情報が欲しい場合は、適宜補足します。
本当は今日中ですが、今週中には仕上げないといけないので、
分かる方がおりましたら、ご回答よろしくお願いします。



―――以下、前回質問した情報―――――――――――――――

同じ行に、二つの住所を出したい。

下記のような場合、どのようなSQLを組めばよろしいでしょうか。

★FROM表
個人ID 識別番号 住所
A 1 東京都品川区~
A 2 北海道札幌市~
A 3 青森県弘前市~
B 1 埼玉県川口市~
B 2 福岡県福岡市~
B 3 宮崎県宮崎市~
・   ・    ・
・   ・    ・
・   ・    ・

★出力結果
A   東京都品川区~ 青森県弘前市~
B   埼玉県川口市~ 宮崎県宮崎市~
↑    ↑        ↑
個人ID 識別1の住所   識別3の住所


イメージとしては以下のような感じです。
識別1:現住所、識別2:保証人住所、識別3:本籍住所

上表を例にすると、
Aさんの現住所は東京都、本籍地は青森県
Bさんの現住所は埼玉県、本籍地は宮崎県
といったかんじです。

ただWHERE ANDでは、どちらかしか引っ張って来れないので、
なにか他の方法がありましたら、教えてください。
よろしくおねがいします。

A 回答 (3件)

>実はその方法までは検索で行き着いております。


>ただ、下記エラーが出てしまいます。

>ORA-01427: 単一行副問合せにより2つ以上の行が戻されます

このエラーが発生するときのSQLを出せる範囲で提示してもらえませんか?
質問内容と希望する回答がなんだか違っているように思えますが・・・

このエラーはselectの列指定かwhere句の条件指定でselect吹副問い合わせをしているときに出ます。私があげた例では、副問い合わせは使用していないので出ないはずです。

ちなみに同一個人ID、識別番号のデータを探すのなら、以下のselect文でいけるはずです。

select 個人ID, 識別番号 from 住所テーブル
group by 個人ID, 識別番号
having count(個人ID) > 1 and count(識別番号) > 1

この回答への補足

了解しました。

かなり個人情報だらけなので、
SQLは出せますが、他のテーブル内容などは厳しいかもしれません。

再度補足連絡します。

補足日時:2010/04/12 21:15
    • good
    • 0
この回答へのお礼

ありがとうございます。

結合関係ではうまく解決できなかたったので、
いままでのソースを見直して、
うまくほかの方法で解決しました。

お礼日時:2010/04/18 13:15

WHERE AND で結合しているのなら、以下のようにしているかな?と思います。



select a.個人ID, b.住所
from 個人テーブル a, 住所テーブル b
where a.個人ID = b.個人ID
and b.識別番号 = 1
(現住所の場合)


で、同時に本籍住所を出したい場合は・・・

select a.個人ID, b.住所 as 現住所, c.住所 as 本籍住所
from 個人テーブル a, 住所テーブル b, 住所テーブル c
where a.個人ID = b.個人ID
and a.個人ID = c.個人ID
and b.識別番号 = 1
and c.識別番号 = 3


さらに現住所や本籍住所が一致しない場合でもnullでデータ出力を行うので・・・

select a.個人ID, b.住所 as 現住所, c.住所 as 本籍住所
from 個人テーブル a, 住所テーブル b, 住所テーブル c
where a.個人ID = b.個人ID (+)
and a.個人ID = c.個人ID (+)
and b.識別番号 = 1
and c.識別番号 = 3

という感じになると思います。

この回答への補足

実はその方法までは検索で行き着いております。
ただ、下記エラーが出てしまいます。

ORA-01427: 単一行副問合せにより2つ以上の行が戻されます

単一行副問い合わせなので、
誰かのIDで2行以上の情報を抽出してしまっているものだと思いますが、
対象者を発見できなくて困っています。
住所テーブルからの抽出方法は、下記情報より分けています。

・個人ID
・住所区分(本籍地か現住所か)
・更新回数(住所変更があった場合、上書きではなく1,2,3・・・と区別をつけています)

なにか対象者を確定できたり、バグ取りする方法があれば
教えていただけると幸いなのですが・・・。

補足日時:2010/04/12 17:49
    • good
    • 0

個人テーブルと住所テーブルとの結合を外部結合にすればいいのでは?


現在、どのようにおこなってますか?

>・下記テーブルの他にもいろいろなテーブルと結合させています。
>・各テーブルとの結合は個人IDで行っています。

以下のように外部結合をすれば住所テーブル側にレコードがなくてもNullで選択出来ます。
from 個人テーブル as a
left outer join 住所テーブル as b
on a.個人ID = b.個人ID

結合について調べてください。
    • good
    • 0

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