Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

209
Vistas
MySQL CTE no referenciado en la cláusula WHERE

Tengo problemas para entender por qué no se puede hacer referencia a un CTE desde una cláusula WHERE . En el siguiente código, la primera consulta funciona bien, pero en la segunda consulta, simplemente reemplazando el valor en la cláusula WHERE con un CTE que calcula ese valor, produce el error "Columna desconocida 'cte' en 'cláusula where'".

 # This query works SELECT * FROM stock_prices WHERE Country_Exchange_Code = 'T' AND Stock_Code IN ('1332'); # But this query produces an error WITH cte AS (SELECT '1332') SELECT * FROM stock_prices WHERE Country_Exchange_Code = 'T' AND Stock_Code IN (cte); # Here is some data to test these two queries with CREATE TABLE stock_prices (Country_Exchange_Code VARCHAR(2), Stock_Code VARCHAR(4), Date DATE, Close FLOAT); INSERT INTO stock_prices VALUES ("T", "1301", '2019-10-29', 75.2), ("T", "1301", '2019-10-30', 76.6), ("T", "1301", '2019-10-31', 77.6), ("T", "1301", '2019-11-01', 77.2), ("T", "1332", '2019-10-29', 52.5), ("T", "1332", '2019-10-30', 49.7), ("T", "1332", '2019-10-31', 50.8), ("T", "1332", '2019-11-01', 50.4), ("T", "1333", '2019-10-29', 13.9), ("T", "1333", '2019-10-30', 13.8), ("T", "1333", '2019-10-31', 14.3), ("T", "1333", '2019-11-01', 14.4);
over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Puede referirse a cte u otra tabla por el nombre (sin usar una subselección de ella) usando la palabra clave TABLE .

 WITH cte AS (SELECT '1332') SELECT * FROM stock_prices WHERE Country_Exchange_Code = 'T' AND Stock_Code IN (TABLE cte);

violín

over 4 years ago · Santiago Trujillo Denunciar

0

Tu puedes hacer:

 WITH cte AS (SELECT '1332' as code) SELECT * FROM stock_prices WHERE Country_Exchange_Code = 'T' AND Stock_Code IN (select code from cte);

Resultado:

 Country_Exchange_Code Stock_Code Date Close ---------------------- ----------- ----------- ----- T 1332 2019-10-29 52.5 T 1332 2019-10-30 49.7 T 1332 2019-10-31 50.8 T 1332 2019-11-01 50.4

Su consulta tenía dos problemas:

  • IN requiere una subconsulta formal con la forma SELECT ...
  • El cte necesitaba columnas con nombre; por eso agregué as code .

Ver ejemplo de ejecución en DB Fiddle .

over 4 years ago · Santiago Trujillo Denunciar

0

Parece que está pensando en un cte como una especie de variable en lugar de pensar en él como una tabla virtual.

No puede hacer IN (cte) al igual que no puede hacer IN (sometablename) ; debe estar IN (select somecol from sometablename) .

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda