Pregunta

la pregunta es

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

respuesta

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

con respecto a (c) ¿qué quieren decir con " Cambiar el nombre de las columnas cuando selecciona desde la vista " ;?

¿Fue útil?

Solución

Creo que la pregunta en la guía de certificación está mal redactada. puede dar nombres explícitos a las columnas cuando selecciona desde una vista, y esto funciona:

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

El problema no es dar alias a las columnas explícitamente. Aquí está el problema: si confía en esto en lugar de definir la vista con nombres de columna distintos, y la vista consiste en una unión de tal manera que los nombres de columna son ambiguos, se encuentra con problemas:

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

Esta no es una vista válida, porque en la definición de la vista, todos los nombres de columna deben ser distintos. Por ejemplo, obtendría resultados ambiguos al consultar la vista:

SELECT a FROM MyView;

¿Selecciona esto la primera columna a o la segunda columna a ?

Por lo tanto, debe tener un conjunto distinto de nombres de columna en la definición de la vista , no es suficiente hacerlos distintos cuando consulta la vista.

Esta es la razón por la que creo que la pregunta de la guía de certificación estaba mal redactada. No se trata de renombrar columnas explícitamente, se trata de garantizar que las columnas de la vista tengan nombres distintos. Esta es una razón común para cambiar el nombre de las columnas, por lo que probablemente esa es la razón por la cual la persona que escribió la pregunta la escribió de esa manera.


Cualquiera de las otras técnicas mencionadas en la pregunta puede resolver la ambigüedad:

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;

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;

De cualquier manera, obtienes las columnas con alias:

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

Otros consejos

Por " renombrar cuando selecciona " seguramente significan algo como SELECT a AS b FROM theview etc. La razón por la que no funciona para la tarea dada de "proporcionar nombres explícitos para las columnas". es que no es necesario que haya un a explícito y sin ambigüedades en la vista para que usted pueda "cambiar el nombre" ... A MENOS QUE ya haya desambiguado por los métodos (a) o (b) [[en el que en caso de que pueda también " renombrar " de esta manera, ¡pero eso es casi un problema secundario! -)]].

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top