ไม่เป็นไรสำหรับเคียวรีย่อยที่ซ้อนกันเพื่อใช้สมนามเดียวกันกับที่ใช้ในเคียวรีพาเรนต์แม้ว่าอาจจะสับสนเล็กน้อยสำหรับบางคนที่อ่านโค้ด พื้นที่ชื่อสำหรับนามแฝงในแบบสอบถามย่อยที่ซ้อนกันจะแยกออกจากพื้นที่ชื่อบนผู้ปกครอง ตัวอย่างเช่นแบบสอบถามด้านล่างมีแบบสอบถามย่อยแบบซ้อน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โปรดทราบว่าเครื่องมือเพิ่มประสิทธิภาพอาจเลือกที่จะใช้ตัวดำเนินการเข้าร่วมภายในแผนเบื้องหลังแม้ว่าการดำเนินการจริงที่ระบุเป็นแบบสอบถามย่อยที่มีความสัมพันธ์กันและไม่ใช่การรวมกับแบบสอบถามย่อยซ้อน