Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

213
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda