2016-04-19 30 views
0

私は以下の2つのテーブルを持つSQL Serverデータベースを持っています。最初のものは「Goal_Group」と呼ばれ、2番目のものは「Goal」と呼ばれます(元のテーブルにはこれ以上のフィールドがあります)。すべてのゴールにはゴールグループがあります。 2つのテーブルは、GGIDによってリンクされています(外部キーを持っています)。SQL Serverの結合テーブル

**Table Goal Group** 
GGID | GGNAME  | GGDESCRIPTION 
1  operational operational description 
2  development development description 

**Table Goal** 
GID | GNAME  | GGID 
1  test1   1 
2  test2   1 
3  test2   1 
4  test2   1 

ゴールグループを含むすべてのゴールを表示するビューを作成したいとします。ビューは以下のようになります。

**Final View** 
GID | GNAME | GGID | GGNAME 

しかし、目標テーブルが2のGGIDで任意の行を持っていないにもかかわらず、私はオットフィールドにnull値を持つGGID = 2の目標グループの私の見解で行を持っていると思います。
私は左でビューを作成するには、以下のように参加し、

select b.GID, b.GNAME, a.GGID, a.GGNAME from GOAL_GROUP a 
left join GOAL b 
on a.GGID=b.GGID 

それは2

のGGIDで私に行を与えるものではありませんが、私は何か間違ったことをしています。これで私を助けてください。

+0

結果を達成するための別の方法を期待される結果を投稿してください。 –

+0

はい、それはあなたのゴールテーブルGGIDがすべてのデータに対して1であるためです。それらのいずれかを2に変更すると、両方のレコードが表示されます。 – Bharat

+0

あなたのクエリは正しく動作し、問題はありません。テーブルに別の問題を見つけようとしてください – wajeeh

答えて

0

あなたは外がGOAL_GROUPテーブルとキーのマッチングとGOALテーブルに参加し使用することができます:あなたが手動で物事を行いたい場合は、

select b.GID, b.GNAME, a.GGID, a.GGNAME from GOAL_GROUP a left outer join GOAL b on a.GGID=b.GGID 

をか(私はこれを示唆しています):

ます一部の一時テーブル内の実際の結果を挿入し、この方法のようにGGID = 2で一時テーブル内の余分な行を置くことができます:我々はクレアあるため

select * into #temp from (select b.GID, b.GNAME, a.GGID, a.GGNAME from GOAL_GROUP aleft join GOAL bon a.GGID=b.GGID) 

DECLARE @GGID2 int=select a.GGID from GOAL_GROUP a where a.GGID=2 

insert into #temp (GID, GName, GGID, GGNAme) values(null, null,@GGID2 , null) 

select * from #temp 

は、念のテーブルゴールを作ることができるNULL値を受け入れますテンポラリテーブルの構造が同じです。そうでない場合は、手動でタンプテーブルを作成します。 これがあなたを助けてくれることを願っています。

0

あなたの文の外側の句不足している:

select b.GID, b.GNAME, a.GGID, a.GGNAME from GOAL_GROUP a 
left outer join GOAL b 
on a.GGID=b.GGID 

select b.GID, b.GNAME, a.GGID, a.GGNAME from GOAL_GROUP a, 
GOAL b 
where a.GGID*=b.GGID 

HTH

+0

私はまた、外部の結合を残してみましたが、それは私の問題では機能しません。あなたが与えられた2番目の例で*の使用は何ですか?それは正しく動作しません。お手伝いありがとう。 – jayz

+0

*は、相手方がない片側のすべてのレコードを持ち出すためのもので、外部結合を表現する別の方法です。残念ながら私はSQL Serverの近くにいないので、答えをテストするために、私はそれを謝罪します –

+0

それは私に次のエラーを与えます。 メッセージ4147、レベル15、状態1、行4 クエリでは、ANSI以外の外部結合演算子( "* ="または "= *")が使用されます。このクエリを変更せずに実行するには、ALTER DATABASEのSET COMPATIBILITY_LEVELオプションを使用して、現在のデータベースの互換性レベルを80に設定してください。ANSI外部結合演算子(LEFT OUTER JOIN、RIGHT OUTER JOIN)を使用してクエリを書き換えることを強くお勧めします。 SQL Serverの将来のバージョンでは、非ANSI結合演算子は下位互換モードでもサポートされません。 – jayz

関連する問題