Tôi có hai bảng sau đây. Tôi đang sử dụng SQL Server 2008 R2tham gia bên ngoài bên trái trong t-sql
Create table #tmp1 (
a char(1)
)
Create table #tmp2 (
id int,
a char(1),
val int
)
insert #tmp1 values ('A')
insert #tmp1 values ('B')
insert #tmp1 values ('C')
insert #tmp2 values (1, 'A', 10)
insert #tmp2 values (1, 'B', 20)
insert #tmp2 values (2, 'A', 30)
insert #tmp2 values (2, 'C', 40)
select * from #tmp1 t1 left outer join #tmp2 t2 on t1.a = t2.a
order by t2.id
này trả kết quả thiết
A 1 A 10
B 1 B 20
C 2 C 40
A 2 A 30
Tôi muốn có kết quả sau thiết
A 1 A 10
B 1 B 20
C 1 null null
A 2 A 30
B 2 null null
C 2 C 40
Ngay bây giờ tôi đang acheiving này bằng cách tạo một bảng mới với một tham gia chéo như thế này và sau đó làm một tham gia bên ngoài
select * into #tmp3 from #tmp1 cross join (select distinct ID from #tmp2) t
select * from #tmp3 t1 left outer join #tmp2 t2 on t1.a = t2.a and t1.id = t2.id
Có cách nào tốt hơn để thực hiện việc này không?
Cảm ơn
+1 cho thiết lập SQL –
Quá trình cài đặt SQL là tốt đẹp. Tuy nhiên, bạn nên tránh "*" trong các truy vấn, vì phải mất một số giải mã để tìm ra cột nào đến từ bảng nào. –