こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

3つのテーブルを結合させたSQL文について

3つのテーブルを結合させたSQL文について作成方法を教えてください。
よろしくお願いいたします。

【テーブル構成】
テーブル名---項目名/項目名・・・です。

tblA---id/del_flg/name
tblB---id/del_flg/add
tblC---id/del_flg/family


各テーブルはidによりリンクされます。

tblAのdel_flgは在籍者=0 退職者=1で、一人1レコードです。


tblBでは住所管理をしています。
旧情報を残したいので、更新時には新たにdel_flg=0でレコードを作成し、既存レコードはdel_flg=1に更新します。

tblCは、既婚者のみ作成されるレコードです。

つまり、tblBとtblCは、レコードが存在しない、あるいはdel_flg=0のみ、del_flg=0とdel_flg=1が混在 のどれかのパターンになります。


【やりたいこと】
いま、これらすべてのテーブルを全部つなげて、在籍している人の情報だけ集めたいのです。

tblAからはdel_flg=0のレコードをすべて取得したうえで、tblBとtblCにdel_flg=0のレコードがあればその情報も取得したい。


【経過】
select *
from
(tblA inner join tblB on tblA.id = tblB.id )
inner join tblC on tblA.id = tblC.id

とりあえずwhere条件をつけなくても、tblCに存在している人しか取得ができないのです。


where条件も含めて、上記条件のもと、希望するようなSQLの組み立て方をご教授ねがいたいのでよろしくお願いいたします。


できれば、早目の回答が希望です。

投稿日時 - 2013-10-03 15:41:52

QNo.8290079

困ってます

質問者が選んだベストアンサー

仕様が微妙ですが、単純に考えればこんな感じ?

select *
from tblA
left join tblB on tblA.id = tblB.id and tblB.del_flg=0
left join tblC on tblA.id = tblC.id and tblC.del_flg=0
where tblA.del_flg=0

ただし、tblBは複数ある可能性があるため分けるのは妥当かもしれませんが
tblCはtblAの機能の一部の方がよいのでは?
すなわち未婚、既婚、以前既婚の状態は排他関係にあるので、複数にならず
既婚カラムで管理すればすっきりするので・・・

投稿日時 - 2013-10-03 16:24:10

お礼

yambejp さま

tblB.del_flg=0 の条件をここにかけるとは! 驚きです。勉強不足でお恥ずかしいです。

思った結果になりました。
本当に助かりました。

もちろんベストアンサーです。

投稿日時 - 2013-10-03 17:17:47

ANo.1

このQ&Aは役に立ちましたか?

6人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問