Руководство по сертификации MySQL Практикует Имена столбцов 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

что касается (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) [[в этом случае вы можете также "переименовать" таким образом, но это в значительной степени второстепенный вопрос!-)]].

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top