मैंने पहले कभी भी right join
का उपयोग नहीं किया है और कभी नहीं सोचा था कि मुझे वास्तव में इसकी आवश्यकता हो सकती है, और यह थोड़ा अप्राकृतिक लगता है। लेकिन उसके बाद मैं इसके बारे में सोचा है, यह स्थिति में वास्तव में उपयोगी है, जब आप कई तालिकाओं के चौराहे के साथ एक मेज में शामिल होने के बाहरी की जरूरत हो सकती है, तो आप इस तरह टेबल है:
और प्राप्त करना चाहते हैं इस तरह परिणाम:
या, एसक्यूएल (एमएस एसक्यूएल सर्वर) में:
declare @temp_a table (id int)
declare @temp_b table (id int)
declare @temp_c table (id int)
declare @temp_d table (id int)
insert into @temp_a
select 1 union all
select 2 union all
select 3 union all
select 4
insert into @temp_b
select 2 union all
select 3 union all
select 5
insert into @temp_c
select 1 union all
select 2 union all
select 4
insert into @temp_d
select id from @temp_a
union
select id from @temp_b
union
select id from @temp_c
select *
from @temp_a as a
inner join @temp_b as b on b.id = a.id
inner join @temp_c as c on c.id = a.id
right outer join @temp_d as d on d.id = a.id
id id id id
----------- ----------- ----------- -----------
NULL NULL NULL 1
2 2 2 2
NULL NULL NULL 3
NULL NULL NULL 4
NULL NULL NULL 5
इसलिए यदि आप left join
पर स्विच करते हैं, तो परिणाम समान नहीं होंगे।
select *
from @temp_d as d
left outer join @temp_a as a on a.id = d.id
left outer join @temp_b as b on b.id = d.id
left outer join @temp_c as c on c.id = d.id
id id id id
----------- ----------- ----------- -----------
1 1 NULL 1
2 2 2 2
3 3 3 NULL
4 4 NULL 4
5 NULL 5 NULL
अधिकार के बिना शामिल होने के ऐसा करने के लिए एक ही रास्ता आम तालिका अभिव्यक्ति या सबक्वेरी
select *
from @temp_d as d
left outer join (
select *
from @temp_a as a
inner join @temp_b as b on b.id = a.id
inner join @temp_c as c on c.id = a.id
) as q on ...
स्रोत
2015-02-20 14:26:50
या, दूसरे शब्दों में कहें, तो आप इसे दाएं और बाएं (और पूर्ण) करना चाहते हैं :) –