Руководство по сертификации MySQL Практикует Имена столбцов Qn - представлений
Вопрос
вопрос в том,
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
что касается (c) что они подразумевают под "Переименовывать столбцы при выборе из представления"?
Решение
Я думаю, что вопрос в руководстве по сертификации сформулирован неудачно.Ты может присвойте явные имена столбцам при выборе из представления, и это сработает:
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
в открывшемся для вас окне "переименовать"...ЕСЛИ вы еще не устранили неоднозначность методами (a) или (b) [[в этом случае вы можете также "переименовать" таким образом, но это в значительной степени второстепенный вопрос!-)]].