Me gustaría saber cómo podría usar un alias en una sentencia where.SQL Usar alias en la instrucción Where
Ejemplo:
SELECT SUBSTRING(Column1, 1, 4) + SUBSTRING(Column1, 4, 3) AS Col1
FROM MyTable
WHERE Col1 = 'MySearch'
utilizo MSSQL 2005
Me gustaría saber cómo podría usar un alias en una sentencia where.SQL Usar alias en la instrucción Where
Ejemplo:
SELECT SUBSTRING(Column1, 1, 4) + SUBSTRING(Column1, 4, 3) AS Col1
FROM MyTable
WHERE Col1 = 'MySearch'
utilizo MSSQL 2005
No es posible, pero se puede hacer lo siguiente:
SELECT SUBSTRING(Column1, 1, 4) + SUBSTRING(Column1, 4, 3) AS Col1
FROM MyTable
WHERE SUBSTRING(Column1, 1, 4) + SUBSTRING(Column1, 4, 3) = 'MySearch'
No hay subconsultas o hacks requieren
Creo que no es posible, pero tal vez usted puede echar un vistazo en expresiones de tabla comunes sobre SQL 2005
De esta manera:
WITH MyCTE(Col1) AS
(
SELECT SUBSTRING(Column1, 1, 4) + SUBSTRING(Column1, 4, 3) AS Col1
FROM MyTable
)
SELECT *
FROM MyCTE
WHERE Col1 = 'MySearch'
SELECT * FROM (
SELECT SUBSTRING(Column1, 1, 4) + SUBSTRING(Column1, 4, 3) AS Col1
FROM MyTable
)
WHERE Col1 = 'MySearch'
(Sé que esto funciona en Oracle, creo que es SQL estándar y funcionaría en MSSQL.)
Es probable que sea más lento sin embargo, si la consulta interna se vuelve compleja. –
Utilice una subconsulta:
SELECT *
FROM
(SUBSTRING(Column1, 1, 4) + SUBSTRING(Column1, 4, 3) AS Col1 FROM MyTable)
WHERE Col1 = 'MySearch'
utilizar una vista o una tabla derivada.
Usando una tabla derivada, a su ejemplo se vería así:
select col1
from
(SELECT SUBSTRING(Column1, 1, 4) + SUBSTRING(Column1, 4, 3) AS Col1
FROM MyTable)
where col1='Mysearch'
La respuesta es que no puede - usted puede hacer esto
SELECT
SUBSTRING(Column1, 1, 4) + SUBSTRING(Column1, 4, 3) AS Col1
FROM
MyTable
WHERE
SUBSTRING(Column1, 1, 4) + SUBSTRING(Column1, 4, 3) = 'MySearch'
En realidad, el uso de alias no hará que su consulta más rápido ya que el optimizador de SQL no es tan tonto como crees, así que simplemente repetiría la expresión SUBSTRING nuevamente.
Para mí, él está buscando una forma de hacer la consulta más legible –
Eso es un poco una violación del principio SECO, ¿no? Cuando modifica la cláusula de selección, debe asegurarse de modificar también el WHERE ... –
Agregar una subconsulta o usar Having hará que la consulta sea más compleja, lo que es peor que repetir una expresión tan simple dos veces. – zvolkov
Usted puede hacer esto:
SELECT Col1
FROM (SELECT SUBSTRING(Column1, 1, 4) + SUBSTRING(Column1, 4, 3) AS Col1) AS x
WHERE Col1 = 'MySearch'
Puede utilizar "tener" en lugar de "donde".
SELECT
SUBSTRING(Column1, 1, 4) + SUBSTRING(Column1, 4, 3) AS Col1
FROM
MyTable
HAVING
Col1 = 'MySearch'
Tener un "dónde" después de la ejecución de la consulta. Tenga cuidado de usarlo en las condiciones adecuadas para no tener ningún problema de rendimiento.
Pero, ¿y si la función que crea col1 es exigente? Entonces, ¿lo ejecuta dos veces? (Subcadena 4 veces en este caso) – DavidVdd
Y, está duplicando el código. La declaración en la cláusula de selección es la misma que en la cláusula where, que dobla el esfuerzo por mantener. –