สมมติว่าเรามีคำถามเช่นนี้:
select a.*,b.*
from
a join b
on a.col1=b.col1
and len(a.col1)=10
สมมติว่าแบบสอบถามดังกล่าวจะใช้แฮร่วมและมีส่วนที่เหลือที่สำคัญการสอบสวนจะเป็นและที่เหลือจะเป็นcol1
len(a.col1)=10
แต่ในขณะที่ดูตัวอย่างอื่นฉันสามารถเห็นทั้งโพรบและส่วนที่เหลือเป็นคอลัมน์เดียวกัน ด้านล่างนี้เป็นรายละเอียดเกี่ยวกับสิ่งที่ฉันพยายามจะพูด:
ค้นหา:
select *
from T1 join T2 on T1.a = T2.a
แผนการดำเนินการพร้อมโพรบและไฮไลต์ที่เหลือ:
ข้อมูลการทดสอบ:
create table T1 (a int, b int, x char(200))
create table T2 (a int, b int, x char(200))
set nocount on
declare @i int
set @i = 0
while @i < 1000
begin
insert T1 values (@i * 2, @i * 5, @i)
set @i = @i + 1
end
declare @i int
set @i = 0
while @i < 10000
begin
insert T2 values (@i * 3, @i * 7, @i)
set @i = @i + 1
end
คำถาม:
โพรบและส่วนที่เหลือสามารถเป็นคอลัมน์เดียวกันได้อย่างไร เหตุใด SQL Server ไม่สามารถใช้คอลัมน์โพรบได้เท่านั้น เหตุใดจึงต้องใช้คอลัมน์เดียวกับส่วนที่เหลือเพื่อกรองแถวอีกครั้ง
ข้อมูลอ้างอิงสำหรับทดสอบ: