Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Utilizar un alias en una where

Estas en el tema de Utilizar un alias en una where en el foro de SQL Server en Foros del Web. Es decir para simplificar pongo una consulta sencilla: Esto funciona: select id_objeto,objeto from tobjetos where id_objeto=100 pero esto no funciona: select id_objeto as laid,objeto from ...
  #1 (permalink)  
Antiguo 25/08/2008, 04:14
 
Fecha de Ingreso: julio-2006
Mensajes: 145
Antigüedad: 17 años, 9 meses
Puntos: 0
Utilizar un alias en una where

Es decir para simplificar pongo una consulta sencilla:

Esto funciona:
select id_objeto,objeto from tobjetos where id_objeto=100

pero esto no funciona:

select id_objeto as laid,objeto from tobjetos where laid=100

El nombre de columna 'laid' no es válido.


Necesito hacer la comparacion por el alias de la columna y no me deja.

Alguna sugerencia??
Muchas gracias!
  #2 (permalink)  
Antiguo 25/08/2008, 08:26
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Utilizar un alias en una where

No puedes, porque el nombre del ALIAS se genera en ese momento, para el WHERE no existe, asi de sencillo.

Te aconsejo leas tu libros en linea.
  #3 (permalink)  
Antiguo 26/08/2008, 00:35
 
Fecha de Ingreso: julio-2006
Mensajes: 145
Antigüedad: 17 años, 9 meses
Puntos: 0
Respuesta: Utilizar un alias en una where

No entiendo como no se puede.He estado leyendo en foros y hacen algo como:

select * from(select...) pero no me parece muy lógico.
Tambien he leido que hay que hacerlo con el group bay o el having... no sé

¿Entonces alguna "alternativa"?

Gracias!
  #4 (permalink)  
Antiguo 26/08/2008, 07:23
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Utilizar un alias en una where

La unica alternativa que tienes es nombrar en el WHERE, las columnas tal cual, no existe otra forma, al menos en T-SQL
  #5 (permalink)  
Antiguo 26/08/2008, 07:29
 
Fecha de Ingreso: enero-2008
Mensajes: 13
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: Utilizar un alias en una where

hola mahoni ....iislas tiene razon no se puede hacer una cosulta sobre un alias en una clausula where ...de la manera que comentas (la de select * from (select...)) en este caso la subcunsulta genera una tabla temporal con uno de sus campos llamados como lo llamas en el select anidado por lo cual fuera de los aprentesis es decir en el select general mas externo puedes ahcer referencia a una "columna" (o como la allas llamado) del select interno.
Te paso un ejemplo


select mialias from (select 880 as mialias) as t
inner join mitabla r on t.mialias=r.id

de esta manera puedo hacer referencia a una columna por su alias pero a decir verdad lo que pasa es que se genera la tabla temporal y hago referencia a un nombre de campo de una tabla y no a un alias en si.

espero haber sido claro.

saludos
  #6 (permalink)  
Antiguo 28/08/2008, 00:01
 
Fecha de Ingreso: agosto-2008
Mensajes: 11
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Utilizar un alias en una where

En resumen... SI SE PUEDE, solo que tendrás que usar subconsultas para poder lograrlo tal como comentan en el mensaje anterior... por ejemplo:


Código:
select * from (
   select id_objeto as laid, objeto 
   from tobjetos 
) temporal
where laid=100

Saludos.
  #7 (permalink)  
Antiguo 28/08/2008, 08:11
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Utilizar un alias en una where

Habria que revisar la convenencia o no de generar una tabla temporal en memoria para hacer SIMPLEMENTE uso de un alias en un where.

Sinceramente compañeros, no veo el caso o la razon para hacer algo como esto

select * from (selecT Numero as id, Nombre as NombreBanco from sm_bancos) as temporal
where id = 12

Pudiendo hacer algo tan sencillo como

SELECT * FROM sm_bancos where Numero = 12

¿Ustedes le ven el uso?
  #8 (permalink)  
Antiguo 28/08/2008, 08:37
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Respuesta: Utilizar un alias en una where

de acuerdo con iislas...

hay que tener cuidado con el performance...

Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #9 (permalink)  
Antiguo 28/08/2008, 09:27
 
Fecha de Ingreso: agosto-2008
Mensajes: 11
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Utilizar un alias en una where

Cita:
Iniciado por iislas Ver Mensaje
Habria que revisar la convenencia o no de generar una tabla temporal en memoria para hacer SIMPLEMENTE uso de un alias en un where.

Sinceramente compañeros, no veo el caso o la razon para hacer algo como esto

select * from (selecT Numero as id, Nombre as NombreBanco from sm_bancos) as temporal
where id = 12

Pudiendo hacer algo tan sencillo como

SELECT * FROM sm_bancos where Numero = 12

¿Ustedes le ven el uso?
Cita:
Iniciado por Andres95 Ver Mensaje
de acuerdo con iislas...

hay que tener cuidado con el performance...

Saludos!

No se para que necesite usar algo así este usuario... solo puedo decir que yo en lo particular si me he visto en la necesidad de hacer algo así... una sola vez, pero para generar un componente que se está utilizando en varios sistemas (muchos).

Cuando compras algo en un supermercado es raro que el cajero te pregunte "¿Para que lo quiere?", así que en este caso la respuesta de "para que le servirá algo así" a la persona que inicio este hilo puede quedar reservada solo para él sin que nos afecte, pero considero también correcto que luego de sacarlo de su duda, se hagn comentarios extras de parte de ustedes (por ejemplo, si afecta o no al performance).

Saludos.
  #10 (permalink)  
Antiguo 28/08/2008, 11:57
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Utilizar un alias en una where

De acuerdo...........

Aunque cuando llegas con un doctor, no le dices, "Doc, quiero que me recete 3 cajas de ampoyetas de eucaliptin con 3.05 mg de miestoceno" (existira???, ejejejeje), le dices que sientes, que te duele, te hace estudios y te receta.

Saludos (no more comments)
  #11 (permalink)  
Antiguo 29/08/2008, 00:42
 
Fecha de Ingreso: julio-2006
Mensajes: 145
Antigüedad: 17 años, 9 meses
Puntos: 0
Respuesta: Utilizar un alias en una where

Hola!

Muchas gracias a todos! Sois la os...
Pues el problema se me ha solucioado con la solucion de la tabla temporal.
No sé si será la forma más optima(supongo que no).
Pero si los alias no se pueden utilizar luego en el where, no tenía otra salida...

Si alguien quiere mi ejemplo o ayuda, no dudeis en contactar conmigo.
Un saludo a todos!!!!!!!!!!
  #12 (permalink)  
Antiguo 29/08/2008, 08:40
 
Fecha de Ingreso: agosto-2008
Mensajes: 11
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Utilizar un alias en una where

Cita:
Iniciado por mahoni Ver Mensaje
Hola!

Muchas gracias a todos! Sois la os...
Pues el problema se me ha solucioado con la solucion de la tabla temporal.
No sé si será la forma más optima(supongo que no).
Pero si los alias no se pueden utilizar luego en el where, no tenía otra salida...

Si alguien quiere mi ejemplo o ayuda, no dudeis en contactar conmigo.
Un saludo a todos!!!!!!!!!!
Te comento que esta solución la implementé en un componente de búsquedas dinámicas para Borland Delphi (siendo yo mismo el doctor que le recetó eso al enfermito). Algunas veces se debe sacrificar "el performance" por la comodidad y la funcionalidad. Quiero suponer que tu no tenías otra salida tampoco para implementar tablas temporales, afortunadamente los diseñadores de SQL pensaron en nosotros para dar soluciones alternas.
Creo que es válido que implementes esta solución y más aún cuando ningún otro te dio otra solución.

Saludos y suerte.
  #13 (permalink)  
Antiguo 17/07/2009, 19:06
 
Fecha de Ingreso: julio-2009
Mensajes: 1
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: Utilizar un alias en una where

No uses un alias en el where pon la formula completa a la cual nombraste con un alias ejemplo
select IF(ISNULL(saldo),movimientos.entrada,saldo) as SaldoAlDia from movmientos

where IF(ISNULL(saldo),movimientos.entrada,saldo) >0

en lugar de where SaldoAlDia >0

Última edición por carlosperezgtz; 17/07/2009 a las 19:28
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:30.