あなたは、tbl3に値がない場合、tbl1と2から値を取得したいと述べました。ここでは、それが定義されているとして、あなたがそのクエリを実行する場合は、あなたが定義され、それが加入して返します参照してくださいよ...
declare @tbl1 table (ClientID int, SvcGoalID int, VendorID int)
insert into @tbl1
values
(17,7887,784)
declare @tbl2 table (ClientID int, SvcGoalID int, SvcAuthID int)
insert into @tbl2
values
(17,7887,634)
declare @tbl3 table (ClientID int, SvcAuthID int)
insert into @tbl3
values
(17,634)
select
t1.*
,t2.*
,t3.*
from
@tbl1 t1
inner join
@tbl2 t2 on t2.SvcGoalID = t1.SvcGoalID
left join
@tbl3 t3 on t3.SvcAuthID = t2.SvcAuthID
--where
-- t3.SvcAuthID is null
を構造への参加があります。 where句のコメントを外すと、tbl3に結合条件が存在するため、行が返されません。しかしながら。通常、これは行を追加する必要がある場合に実行され、現在はかなり冗長です。
あなたの結合構造は基本的にこれらのすべてを内部結合にします。 @ TBL3に異なる値を追加すると、私は最初、私はCASEステートメントを使用します(この場合のTBL1とTBL2で)二次テーブルをJOINをLEFTでしょう。この..
declare @tbl1 table (ClientID int, SvcGoalID int, VendorID int)
insert into @tbl1
values
(17,7887,784)
declare @tbl2 table (ClientID int, SvcGoalID int, SvcAuthID int)
insert into @tbl2
values
(17,7887,634)
declare @tbl3 table (ClientID int, SvcAuthID int)
insert into @tbl3
values
--(17,634),
(17,555)
select
t1.*
,t2.*
--,t3.*
from
@tbl1 t1
inner join
@tbl2 t2 on t2.SvcGoalID = t1.SvcGoalID
left join
@tbl3 t3 on t2.SvcAuthID = t3.SvcAuthID
where
t3.SvcAuthID is null
'左tbl2.SvcAuthID = tbl3.SvcAuthID tbl3.SvcAuthIDがnull'なので – scsimon
あなたがTBL3に値を言っていないときは、一致する行とのJOINをしないことを意味するんです場所にTBL3に参加? (つまり、あなたの例では、tbl3.SvcAuthID = 633の場合は、データを返すことになります) – yanman1234
@scsimon - ClientIDは使用できません - tbl1とtbl2の間のSvcGoalIDでなければなりません。 20-30は同じクライアントのtb1とtbl2の間に記録され、同じことがtbl3の間に入ります。私はsvcGoalIDとsvcAuthIDを使用することができます – BobSki