Практическое руководство по сертификации MySQL Qn - Имена столбцов Views - PullRequest
2 голосов
/ 13 сентября 2009

вопрос

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) что они означают под "Переименовывать столбцы, когда вы выбираете из вида"?

Ответы [ 2 ]

1 голос
/ 18 сентября 2009

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

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 голосов
/ 13 сентября 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...