محاكاة الاتحاد لجعل المنظر المفهرس
-
25-09-2019 - |
سؤال
لقد حصلت على مخطط الجدول التالي في SQL Server 2005 وأرغب في تحويله إلى عرض مفهرس لبعض الاستعلامات التي أكتبها حتى أتمكن من إجراء التغييرات الهيكلية الدائمة.
الجداول كما يلي
Writing
(
DocumentSerial int
Grader1_ID int
Grade_1 int
Grader2_ID int
Grade_2 int
Grader3_ID int
Grade_3 int
)
Users
(userID int,
firstname,
lastname
)
أريد طاولة مع صف واحد لكل مجموعة من الصف/الدرجة/المستند حيث يكون الصف هو إما Grader 1 أو Grader 2 أو Grader 3
يستخدم العرض الذي كتبته Union ، لذلك لا يفهرس:
select documentSerial,grader1_id as grader_id, grade_1 as grade ,1 as sequence
from Writing w inner join User U on w.grader1_id=u.userid
UNION
select documentSerial,grader2_id as grader_id, grade_2 as grade ,2 as sequence
from Writing w inner join User U on w.grader2_id=u.userid
UNION
select documentSerial,grade31_id as grader_id, grade_3 as grade ,3 as sequence
from Writing w inner join User U on w.grader3_id=u.userid
المشكلة هي - SQL لا يمكن فهرسة العرض مع الاتحاد ...
المحلول
لماذا يجب أن تكون طريقة عرض مفهرسة عندما يمكنك استخدام جدول مناسب:
SELECT x.*
INTO normalized_table
FROM (select documentSerial,grader1_id as grader_id, grade_1 as grade ,1 as sequence
from Writing w
join User U on w.grader1_id = u.userid
UNION ALL
select documentSerial,grader2_id as grader_id, grade_2 as grade ,2 as sequence
from Writing w
join User U on w.grader2_id = u.userid
UNION ALL
select documentSerial,grade31_id as grader_id, grade_3 as grade ,3 as sequence
from Writing w
join User U on w.grader3_id = u.userid) x
أتفهم أنك ربما تريد العرض حتى لا يكون لديك مشاحنات مزامنة البيانات. البديل الآخر الوحيد هو عدم فهرسة العرض ...
لا تنتمي إلى StackOverflow