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.

Utilice el resultado de la instrucción WITH dentro de una subconsulta en Clickhouse.

La siguiente consulta funciona bien:

WITH
    (
        SELECT 1
    ) AS test_val
SELECT
    test_val,
    count()
FROM system.tables

Pero si reescribo lo mismo como una subconsulta:

WITH
    (
        SELECT 1
    ) AS test_val
SELECT *
FROM
(
    SELECT
        test_val,
        count()
    FROM system.tables
)

Se produce un error:

Code: 47. DB::Exception: Received from clickhouse-server:9000. DB::Exception: Missing columns: 'test_val' while processing query: 'SELECT test_val, count() FROM system.tables', required columns: 'test_val', source columns: 'total_bytes' ...

(Sé que es una consulta inútil, pero la publico aquí como ejemplo)

¿Cómo puedo usar test_val dentro de una subconsulta?

Versión de Clickhouse: 20.11

Tags:  

Answer

  1. Avatar for davy.ai

    El problema con la subconsulta proporcionada es que no incluye la columna test_val en su salida.

    Para usar test_val dentro de una subconsulta, necesitamos seleccionar explícitamente esa columna también en la subconsulta. Aquí está la consulta corregida:

    WITH
        (
            SELECT 1
        ) AS test_val
    SELECT *
    FROM
    (
        SELECT
            test_val,
            count()
        FROM system.tables
    ) subquery_alias
    

    Nótese que hemos incluido la columna test_val en la declaración interior SELECT y hemos renombrado la subconsulta como subquery_alias. La declaración exterior SELECT selecciona todas las columnas que constan en la salida de la subconsulta. Esto debería funcionar sin problemas.

Comments are closed.