यह नेस्टेड उपश्रेणियों के लिए मूल उपनाम में उपयोग किए गए समान उपनामों का उपयोग करने के लिए ठीक है, हालांकि यह कोड पढ़ने वाले किसी व्यक्ति के लिए थोड़ा भ्रमित हो सकता है। एक नेस्टेड सबक्वेरी पर उपनामों के लिए नाम स्थान माता-पिता पर नाम स्थान से अलग है। उदाहरण के लिए नीचे दिए गए क्वेरी में एक नेस्टेड सबक्विरी है b
जिसमें उसके b
भीतर एक उपनाम भी है । यह संभावित रूप से प्रोग्रामर को भ्रमित करेगा लेकिन DBMS इंजन के साथ ठीक है:
select a.foo
,b.bar
,b.BarCount
from (select b.bar
,count (*) as BarCount
from BarTable b
join OtherTable o
on b.OtherTableID = o.OtherTableID
group by b.bar) b
join Foobar a
on a.bar = b.bar
एक सहसंबंधित उप-वर्ग पर आपके पास माता-पिता के उपनामों तक पहुंच है, इसलिए उपनामों को मूल क्वेरी और सहसंबद्ध उपश्रेणी में अद्वितीय होना चाहिए। यदि हम एक सहसंबंधित उप-वर्ग लेते हैं जैसे कि नीचे एक, हमारे पास एक एकल, वैश्विक नाम स्थान है जिसे मूल क्वेरी और सहसंबद्ध उपकुंजी के बीच साझा किया गया है:
select a.foo
,b.bar
from Foobar a
join Bar b
on b.FooBarID = a.FooBarID
where not exists
(select 1
from Bar b2
where b2.BarCategoryID = b.BarCategoryID
and b2.BarDate > b.BarDate)
सहसंबंधित उप-वर्ग में एक उपनाम नहीं है क्योंकि यह ऐसे 1 के रूप में शामिल नहीं होता है । संदर्भ b
और के b2
लिए bar
दोनों उपसमुच्चय के लिए उपलब्ध हैं क्योंकि सहसंबद्ध उपश्रेणियाँ माता-पिता के साथ उपनाम के लिए उनके नाम स्थान को साझा करती हैं।
1 ध्यान दें कि ऑप्टिमाइज़र पर्दे के पीछे की योजना के भीतर शामिल होने वाले ऑपरेटरों का उपयोग करने का विकल्प चुन सकता है, हालांकि निर्दिष्ट वास्तविक ऑपरेशन एक सहसंबद्ध उपश्रेणी है और एक नेस्टेड उपश्रेणी के खिलाफ शामिल नहीं है।