ฉันใช้ SQL Server 2008 R2
ฉันเพิ่งเจอ APPLY ใน SQL และชอบที่จะแก้ปัญหาการสืบค้นสำหรับหลาย ๆ กรณี
ตารางจำนวนมากที่ฉันใช้ 2 left join เพื่อให้ได้ผลลัพธ์ฉันสามารถสมัครนอก 1 ครั้งได้
ฉันมีข้อมูลจำนวนเล็กน้อยในตารางฐานข้อมูลท้องถิ่นของฉันและหลังจากการปรับใช้รหัสควรทำงานบนข้อมูลอย่างน้อย 20 ครั้งใหญ่
ฉันกังวลว่าการใช้งานภายนอกอาจใช้เวลานานกว่าเงื่อนไขการเข้าร่วม 2 ด้านซ้ายสำหรับข้อมูลจำนวนมาก
ทุกคนสามารถบอกได้ว่าการนำไปใช้งานได้อย่างไรและจะส่งผลต่อประสิทธิภาพการทำงานอย่างไรในข้อมูลที่มีขนาดใหญ่มากถ้าเป็นไปได้ความสัมพันธ์เชิงสัดส่วนกับขนาดของแต่ละตารางเช่นสัดส่วนกับ n1 ^ 1 หรือ n1 ^ 2 ... โดยที่ n1 คือจำนวนแถวในตาราง 1
นี่คือแบบสอบถามที่มี 2 ซ้ายเข้าร่วม
select EC.*,DPD.* from Table1 eC left join
(
select member_id,parent_gid,child_gid,LOB,group_gid,MAX(table2_sid) mdsid from Table2
group by member_id,parent_gid,child_gid,LOB,group_gid
) DPD2 on DPD2.parent_gid = Ec.parent_gid
AND DPD2.child_gid = EC.child_gid
AND DPD2.member_id = EC.member_id
AND DPD2.LOB = EC.default_lob
AND DPD2.group_gid = EC.group_gid
left join
Table2 dpd on dpd.parent_gid = dpd2.parent_gid
and dpd.child_gid = dpd2.child_gid
and dpd.member_id = dpd2.member_id
and dpd.group_gid = dpd2.group_gid
and dpd.LOB = dpd2.LOB
and dpd.table2_sid = dpd2.mdsid
นี่คือแบบสอบถามที่มีการใช้งานภายนอก
select * from Table1 ec
OUTER APPLY (
select top 1 grace_begin_date,retroactive_begin_date,Isretroactive
from Table2 DPD
where DPD.parent_gid = Ec.parent_gid
AND DPD.child_gid = EC.child_gid
AND DPD.member_id = EC.member_id
AND DPD.LOB = EC.default_lob
AND DPD.group_gid = EC.group_gid
order by DPD.table2_sid desc
) DPD