es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La consulta no funciona solamente cuando está dentro de la declaración WITH … AS.

Tengo una consulta bastante difícil, por lo que quiero utilizar la sintaxis WITH … AS para descomponerla en pasos más pequeños. Estoy tratando de construir una consulta ficticia para ver cómo funciona, que básicamente selecciona las estaciones que pertenecen a una determinada empresa y luego selecciona todo de nuevo.

WITH company_stations AS (
    SELECT * FROM Station WHERE Station.stationProvider = 'olympia_odos'
) SELECT * FROM company_stations;

La consulta interna funciona correctamente por sí misma:

SELECT * FROM Station WHERE Station.stationProvider = 'olympia_odos'

Pero cuando la uso dentro de la declaración WITH AS, me da el mensaje de error muy útil:

ERROR 1064 (42000): Tenes un error en tu sintaxis SQL; verifique el manual que corresponde a tu versión del servidor MySQL para conocer la sintaxis correcta a utilizar cerca de ‘company_stations AS (SELECT stationName FROM Station WHERE Station.stationProvid’ en la línea 1

Intenté buscar el ERROR 1064 (42000), pero parece que todos los que enfrentaron este error estaban en el proceso de construcción, población o acceso a una base de datos. He hecho todas estas cosas, pero la consulta específica parece ser problemática.

También he intentado con los sospechosos habituales, como ' o " o , o ( o sin (, etc.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema con la consulta proporcionada puede deberse al hecho de que la instrucción SELECT dentro de la cláusula WITH está utilizando el asterisco (*) como comodín para seleccionar todas las columnas de la tabla Station. Sin embargo, la instrucción SELECT posterior fuera de la cláusula WITH también está utilizando el mismo comodín para seleccionar todas las columnas de la subconsulta “company_stations”. Esto puede llevar a ambigüedades y conflictos, especialmente si hay columnas con el mismo nombre en ambas tablas.

    Para resolver este problema, se recomienda listar explícitamente las columnas a seleccionar en lugar de utilizar el comodín (*), de la siguiente manera:

    WITH company_stations AS (
        SELECT stationName, stationProvider, otherColumn FROM Station WHERE Station.stationProvider = 'olympia_odos'
    ) SELECT * FROM company_stations;
    

    Esta consulta selecciona solo las columnas requeridas de la tabla Station que pertenecen a la empresa especificada, y luego utiliza la subconsulta “company_stations” para recuperar las filas seleccionadas. Tenga en cuenta que el marcador de posición “otherColumn” debe ser reemplazado por el nombre real de cualquier otra columna(s) que se necesite seleccionar.

Comments are closed.