2009-09-13 1 views
2

вопрос являетсяMySQL сертификации Практическое руководство Qn - Views' Column Имена

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

относительно (с) Что они означают «Переименовать столбцы при выборе с точки зрения «?

+0

Я не могу себе представить, что они здесь означают. Возможно, вы называете столбцы тем, что вы хотите и надеетесь, что они будут? Выполнение инструкции «ALTER VIEW» перед столбцом? Мне так любопытно, как ты. – Eric

ответ

1

Я думаю, что вопрос в руководстве по сертификации сформулирован плохо. Вы можете явных имен столбцов при выборе из вида, и это работает:

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 
0

Под «переименованием при выборе» они, безусловно, означают что-то вроде SELECT a AS b FROM theview и т. Д. Причина, по которой он не работает для данной задачи «предоставления явных имен для столбцов», заключается в том, что не должно быть явного, недвусмысленного a в представлении для вас, чтобы «переименовать» ... ЕСЛИ вы уже неоднозначны с помощью методов (a) или (b) [[в этом случае вы можете также «переименовать» этот путь, но это в значительной степени вторичная проблема ! -)]].

+0

Я действительно не понимаю, что «нет необходимости в явном, недвусмысленном a в представлении для вас, чтобы« переименовать »...« есть ли опечатка? – iceangel89

+0

Я имел в виду следующее: если вы не предоставляете 'column_list' или предложение' as' для каждого столбца в 'CREATE VIEW ... SELECT', имена фактических столбцов представлений не являются« явными и недвусмысленными », (они технически однозначны, поскольку дубликаты не допускаются, но не обязательно однозначны для читателя). –

+0

hmm ... так что, например, используя SELECT a AS b FROM theview НЕ «предоставляет явные имена для столбцов ** VIEW'S **», но столбцы «набора результатов» – iceangel89

Смежные вопросы