[pgsql-jp: 40598] Re: JOIN構文についてご指導下さい

Kiyofumi MATSUMOTO k_matsumoto @ gimmond.co.jp
2010年 12月 7日 (火) 14:41:30 JST


各位

度々申し訳ございません。
先ほど佐々木さんから頂いたポストに対し、ご本人に直接
メールを送信してしまっておりました(;;)

再度下記の通りご返信戴いておりましたので私より送信させて頂きます。

> 佐々木さん

度々有り難うございました。またよろしくお願い致します!


> 松本さん
> 
> セルフジョインではありません。
> セルフジョインというのは
> 
> FROM TABLE_X A INNER JOIN TABLE_X B ON ...
> 
> という形のジョインのことです。
> 
> 
> Kiyofumi MATSUMOTO <k_matsumoto @ gimmond.co.jp> wrote:
> 
> > /* お詫び */
> > 実名投稿になるのを失念しハンドルで投稿してしまいました。
> > 管理人様、大変お騒がせ致しました。
> > また、皆々様には大変失礼致しましたm(__)m
> > 
> > 佐々木さん
> > 
> > 「あかいね」こと松本と申します。
> > この度は早速有難うございました。
> > 
> > いずれの方法においても無事希望通りの動作を確認致しました!
> > 
> > ご教示戴いた内容でググってみたのですが、これはセルフジョイン
> > になるのでしょうか?
> > 
> > 大変参考になりました。今後ともよろしくお願い致しますm(__)m
> > 
> > 
> > > 「あかいね」さん
> > > 佐々木と申します。
> > > 次のような SQL 文にします。
> > > 
> > > SELECT
> > >     TBH_SIWAKEHST.ID, 
> > >     TBH_SIWAKEHST.TXT_SIWAKEDATE, 
> > >     TBH_SIWAKEHST.TXT_ATESAKI, 
> > >     B.TXT_KAMOKUTEXT,
> > >     C.TXT_KAMOKUTEXT,
> > >     TBH_SIWAKEHST.INT_AMOUNT
> > > 
> > > FROM
> > >     TBH_SIWAKEHST, TBM_KAMOK B, TBM_KAMOK C
> > > WHERE
> > >     B.ID = TBH_SIWAKEHS.TXT_KARIKATA AND
> > >     C.ID = TBH_SIWAKEHS.TXT_KASHIKATA
> > > 
> > > または
> > > 
> > > SELECT
> > >     TBH_SIWAKEHST.ID, 
> > >     TBH_SIWAKEHST.TXT_SIWAKEDATE, 
> > >     TBH_SIWAKEHST.TXT_ATESAKI, 
> > >     B.TXT_KAMOKUTEXT,
> > >     C.TXT_KAMOKUTEXT,
> > >     TBH_SIWAKEHST.INT_AMOUNT
> > > 
> > > FROM
> > >     TBH_SIWAKEHST
> > >     INNER JOIN TBM_KAMOK B ON B.ID = TBH_SIWAKEHS.TXT_KARIKATA
> > >     INNER JOIN TBM_KAMOK C ON C.ID = TBH_SIWAKEHS.TXT_KASHIKATA
> > > 
> > > です。
> > > 
> > > Kiyofumi MATSUMOTO <k_matsumoto @ gimmond.co.jp> wrote:
> > > 
> > > > 「あかいね」と申します。
> > > > 
> > > > Microsoft Access2007 + POSTGRES 9.0でDBの勉強を始めたばかりの者です。
> > > > どうぞよろしくお願い致します。
> > > > 
> > > > これまでエクセルで管理していた経理関係のデータをDBで管理しようと
> > > > しています。
> > > > 
> > > > 経理科目はテーブル TBM_KAMOKU にあり、TBM_KAMOKUは
> > > > 
> > > > ID
> > > > TXT_KAMOKUTEXT 
> > > > 
> > > > 以上2フィールドです。IDは科目コードが格納されるテキスト型で、
> > > > TXT_KAMOKUTEXTは科目名を格納するテキスト型です。
> > > > 
> > > > 一方、元になる仕訳データは TBH_SIWAKEHST にあり、TBH_SIWAKEHST は
> > > > 
> > > > ID
> > > > TXT_SIKWAKEDATE
> > > > TXT_ATESAKI
> > > > TXT_KARIKATA
> > > > TXT_KASHIKATA
> > > > INT_AMOUNT
> > > > 
> > > > 以上6フィールド、IDのみシリアル型で他は全てテキスト型です。
> > > > 
> > > > これを、科目コードではなく科目名で表示させるSELECT文を発行したい
> > > > のですが、
> > > > 
> > > > 
> > > > SELECT
> > > >     TBH_SIWAKEHST.ID, 
> > > >     TBH_SIWAKEHST.TXT_SIWAKEDATE, 
> > > >     TBH_SIWAKEHST.TXT_ATESAKI, 
> > > > 
> > > >     TBM_KAMOKU.TXT_KAMOKUTEXT,   /* ←ここに借方科目を出したい */
> > > >     TBM_KAMOKU.TXT_KAMOKUTEXT,  /* ←ここに貸方科目を出したい */
> > > > 
> > > >     TBH_SIWAKEHST.INT_AMOUNT
> > > > 
> > > > FROM
> > > >     TBH_SIWAKEHST
> > > > 
> > > > INNER JOIN TBM_KAMOKU ON TBH_SIWAKEHST.TXT_KARIKATA=TBM_KAMOKU.ID;
> > > >     
> > > > 
> > > > これだとTXT_KARIKATAを引数とした同じ内容の列が2行表示されます。
> > > > (これは理解出来ます)
> > > > したがって、TXT_KASHIKATAを引数とした列を表示させるためにJOIN構文を
> > > > 加工しようとしたのですが、例えば
> > > > 
> > > > FROM
> > > > 	(TBH_SIWAKEHST 
> > > > INNER JOIN TBM_KAMOKU ON TBH_SIWAKEHST.TXT_KARIKATA=TBM_KAMOKU.ID)
> > > > INNER JOIN TBM_KAMOKU ON TBH_SIWAKEHST.TXT_KASHIKATA=TBM_KAMOKU.ID;
> > > > 
> > > > などとしても
> > > > 
> > > > ERROR: テーブル名"tbm_kamoku"が複数指定されました
> > > > 
> > > > となります。
> > > > 
> > > > この場合どのようにすれば良いでしょうか?
> > > > ご指導よろしくお願い致します。
> 


pgsql-jp メーリングリストの案内