Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Membuat Tampilan dari Tabel Anak Terkait

Pertama-tama, mari kita coba melihat pro dan kontra dari masing-masing 2 pendekatan:

create view vw_Car1
as
  SELECT 
      c.Id,
      case when f.FordId is not null then 'Ford' else 'Chevy' end as Maker,
      coalesce(f.Model, ch.Model) as Model
  FROM Car as c
  LEFT JOIN Ford as f on c.Id = f.FordId
  LEFT JOIN Chevy as ch on c.Id = ch.ChevyId
  WHERE (f.FordId is not null or ch.ChevyId is not null);

create view vw_Car2
as
  select FordId as id, 'Ford' as Maker, Model from Ford
  union all
  select ChevyId as id, 'Chevy' as Maker, Model from Chevy;

Yang pertama lebih baik bila Anda menggunakannya dalam gabungan, terutama jika Anda tidak akan menggunakan semua kolom Anda. Misalnya, Anda memiliki tampilan saat menggunakan vw_Car :

create table people (name nvarchar(128), Carid int);

insert into people
select 'John', 1 union all
select 'Paul', 2;

create view vw_people1
as
select
    p.Name, c.Maker, c.Model
from people as p
   left outer join vw_Car1 as c on c.ID = p.CarID;

create view vw_people2
as
select
    p.Name, c.Maker, c.Model
from people as p
   left outer join vw_Car2 as c on c.ID = p.CarID;

Sekarang, jika Anda ingin melakukan pemilihan sederhana:

select Name from vw_people1;

select Name from vw_people2;

Yang pertama adalah pilih sederhana dari people (vw_Car1 tidak akan ditanyakan sama sekali). Yang kedua akan lebih rumit - Ford dan Chevy akan ditanyakan. Anda mungkin berpikir bahwa pendekatan pertama lebih baik, tetapi mari kita coba kueri lain:

select *
from vw_people1
where Maker = 'Ford' and Model = 'Fiesta';

select *
from vw_people2
where Maker = 'Ford' and Model = 'Fiesta';

Di sini yang kedua akan lebih cepat, terutama jika Anda memiliki indeks pada Model kolom.

=> demo sql fiddle - lihat rencana kueri kueri ini.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sql Server 2008 MERGE - cara terbaik untuk mendapatkan hitungan

  2. Beberapa pernyataan pilih dalam prosedur tersimpan untuk mendapatkan hasil yang diinginkan

  3. Beberapa Koneksi Dengan String Koneksi Yang Sama Dalam Satu Transaksi, Transaksi Ditingkatkan?

  4. Statistik Database Pembaruan SQL Server

  5. Bagaimana saya bisa MEMASUKKAN data ke dalam dua tabel secara bersamaan di SQL Server?