Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

संबंधित चाइल्ड टेबल से दृश्य बनाना

सबसे पहले, आइए प्रत्येक 2 दृष्टिकोणों के पेशेवरों और विपक्षों को देखने का प्रयास करें:

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;

जब आप इसे जॉइन में उपयोग करते हैं तो पहला बेहतर होता है, खासकर यदि आप अपने सभी कॉलम का उपयोग नहीं करेंगे। उदाहरण के लिए, मान लें कि जब आप अपने 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;

अब, यदि आप सरल चयन करना चाहते हैं:

select Name from vw_people1;

select Name from vw_people2;

पहला आसान होगा people में से चुनें (vw_Car1 बिल्कुल नहीं पूछा जाएगा)। दूसरा वाला अधिक जटिल होगा - Ford और Chevy दोनों से पूछताछ की जाएगी। आप सोच सकते हैं कि पहला दृष्टिकोण बेहतर है, लेकिन आइए एक और प्रश्न का प्रयास करें:

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

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

यहां दूसरा तेज़ होगा, खासकर यदि आपके पास Model . पर अनुक्रमणिका है कॉलम।

=> sql fiddle डेमो - इन प्रश्नों की क्वेरी योजनाएं देखें।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एकाधिक तालिकाओं में पूर्ण-पाठ खोज का अनुकूलन करें

  2. SqlBulkCopy का उपयोग करके SQL सर्वर पर CSV फ़ाइल आयात करें

  3. SQL पुनरावर्ती मेनू छँटाई

  4. SQL सर्वर (T-SQL) में लॉगिन की डिफ़ॉल्ट भाषा प्राप्त करने के 2 तरीके

  5. एसक्यूएल:बाधाओं को बनाए रखते हुए डेटाबेस का सामान्यीकरण