牛、豚、鶏、どれか一つ食べられなくなるとしたら?

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の組み立て方をご教授ねがいたいのでよろしくお願いいたします。


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

A 回答 (1件)

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



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の機能の一部の方がよいのでは?
すなわち未婚、既婚、以前既婚の状態は排他関係にあるので、複数にならず
既婚カラムで管理すればすっきりするので・・・
    • good
    • 0
この回答へのお礼

yambejp さま

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

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

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

お礼日時:2013/10/03 17:17

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

関連するカテゴリからQ&Aを探す