2012-04-18 9 views
5

Imaginemos una combinación de 3 tablas, tiene 14 columnas, por ejemplo. Me gustaría cambiar el nombre de una de las columnas con un alias. ¿Hay alguna manera o hacerlo sin tener que escribir los otros 13 nombres de columna en la declaración de selección?Seleccione * y cree un alias sobre una columna

Lo que estoy buscando en pseudocódigo es

SELECT * [rename user.login as username] from users join 
     (select * from statistics join accounts) 
+2

No debe usar 'select *' en el código de producción de todos modos. Estoy bastante seguro de que escribir los 13 nombres de columnas no habría tomado menos tiempo que escribir esta pregunta. –

+0

Pero nunca aprendería cosas nuevas ... – dani24

Respuesta

3

Su sintaxis propuesta es buena, la OMI. De hecho, es muy similar al lenguaje de la base de datos Tutorial D:

user RENAME (login AS username) 

proyectaría los 14 atributos de la user relvar con un renombrado como se especifica.

Del mismo modo, Tutorial D tiene un operador de proyección ALL BUT, p.

user { ALL BUT login } 

daría lugar a una relación de 13 atributos en su caso.

Lamentablemente, SQL nunca ha tenido estos atajos útiles y probablemente nunca lo haga. Tal vez deberíamos considerarnos afortunados de haber obtenido SELECT * en los primeros días; ¡nunca nos lo concederían en tiempos más recientes! El grupo que representa a los usuarios de SQL tomó una propuesta para una sintaxis de tipo SELECT * BUT <commalist> para el comité de estándares de SQL, pero fue rechazada. SELECT * is disliked on SO too!

4
select users.login as username, users.* 
    from users 

Por desgracia, la columna aparecerá dos veces, pero no hay nada que puedas hacer.

Con unirse a ella se verá algo como esto:

select u.login as username, u.*, s.* 
    from users as u, statistics as s 
    where u.user_id = s.user_id 
+0

"la columna aparecerá dos veces, pero no hay nada que puedas hacer" - Sospecho que quieren cambiar el nombre de la columna para realizar una combinación natural (obsérvese la ausencia de unión explícita cláusulas), que sin duda resolvería el problema de la columna que aparece dos veces cuando se usa 'SELECT *'. – onedaywhen

Cuestiones relacionadas