الخلية شهادة دليل الممارسة QN - أسماء الأعمدة المشاهدات "

StackOverflow https://stackoverflow.com/questions/1416853

  •  06-07-2019
  •  | 
  •  

سؤال

والسؤال هو

Which of the following methods for providing explicit names for the columns in a view work?

a. Include a column list
b. Provide column aliases in the view SELECT statement
c. Rename the columns when you select from the view

الجواب

a. Works: Include a column list
b. Works: Provide column aliases in the view SELECT statement
c. Does not work: Rename the columns when you select from the view

وفيما يتعلق (ج) ما هو المقصود ب "إعادة تسمية الأعمدة عند تحديد من وجهة نظر"؟

هل كانت مفيدة؟

المحلول

وأعتقد أن اللهجة السؤال في دليل شهادة سيئة. أنت <م> يمكن إعطاء أسماء صريحة إلى الأعمدة عند تحديد من وجهة نظر، وهذا يعمل:

CREATE VIEW MyView AS SELECT a, b, c FROM MyTable;
SELECT a AS d, b AS e, c AS f FROM MyView;

والمشكلة ليست مع إعطاء الأسماء المستعارة إلى الأعمدة بشكل صريح. هنا تكمن المشكلة: إذا كنت تعتمد على هذا بدلا من تحديد وجهة النظر مع أسماء الأعمدة متميزة، والرأي يتكون من الانضمام بحيث أسماء الأعمدة غامضة، واجهت مشاكل:

CREATE VIEW MyView AS 
  SELECT m.a, m.b, m.c, o.a, o.b, o.c 
  FROM MyTable m JOIN OtherTable o;

وهذه ليست وجهة نظر صحيحة، لأنه في تعريف الرأي، يجب أن تكون كافة أسماء الأعمدة واضح. على سبيل المثال، سوف تحصل على نتائج غامضة عند الاستعلام الشخصي:

SELECT a FROM MyView;

هل هذا حدد العمود a الأول أو العمود a الثاني؟

وهكذا يجب أن يكون لديك مجموعة متميزة من أسماء الأعمدة في تعريف الرأي ، فإنه لا يكفي لجعلها متميزة كما كنت الاستعلام عن الرأي.

وهذا هو السبب في أنني أعتقد أن السؤال دليل شهادة صيغت بشكل سيئ. انها ليست حول إعادة تسمية الأعمدة بشكل واضح، ولكن عن التأكد من أن أعمدة رأي لها أسماء مختلفة. وهذا هو السبب الشائع لإعادة تسمية الأعمدة، لذلك ربما كان هذا السبب في أن الشخص كتابة السؤال وكتب على هذا النحو.


وإما من التقنيات الأخرى المذكورة في السؤال يمكن حل الغموض:

CREATE VIEW MyView (a, b, c, d, e, f) AS 
  SELECT m.a, m.b, m.c, o.a, o.b, o.c 
  FROM MyTable m JOIN OtherTable o;

أو

CREATE VIEW MyView AS 
  SELECT m.a, m.b, m.c, o.a AS d, o.b AS e, o.c AS f 
  FROM MyTable m JOIN OtherTable o;

وفي كلتا الحالتين، يمكنك الحصول على أعمدة مستعارة:

SELECT * FROM MyView; -- returns result with columns a, b, c, d, e, f

نصائح أخرى

وبواسطة "إعادة تسمية عند تحديد" ما يعني بالتأكيد شيء من هذا القبيل SELECT a AS b FROM theview الخ والسبب أنها لا تعمل لمهمة معينة "تقديم أسماء صريحة للأعمدة" هو أن ليس من الضروري أن يكون هناك وضوحا، a unambigous في وجهة نظر بالنسبة لك ل"إعادة تسمية" ... إلا إذا كنت قد disambiguated بالفعل أساليب (أ) أو (ب) [[وفي هذه الحالة قد <م> أيضا "إعادة تسمية" بهذه الطريقة، ولكن هذا جدا كثيرا قضية ثانوية -!.)]]

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top